자바 스크립트를 사용하여 객체에 값이 있는지 확인하는 방법
자바 스크립트에 개체가 있습니다.
var obj = {
"a": "test1",
"b": "test2"
}
test1이 객체에 값으로 존재하는지 어떻게 확인합니까?
Object의 값을 배열로 바꾸고 문자열이 있는지 테스트 할 수 있습니다. Object가 중첩되지 않고 문자열이 정확히 일치한다고 가정합니다.
var obj = { a: 'test1', b: 'test2' };
if (Object.values(obj).indexOf('test1') > -1) {
console.log('has test1');
}
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/values
Array 메서드를 사용할 수 있습니다 .some
.
var exists = Object.keys(obj).some(function(k) {
return obj[k] === "test1";
});
시험:
var obj = {
"a": "test1",
"b": "test2"
};
Object.keys(obj).forEach(function(key) {
if (obj[key] == 'test1') {
alert('exists');
}
});
또는
var obj = {
"a": "test1",
"b": "test2"
};
var found = Object.keys(obj).filter(function(key) {
return obj[key] === 'test1';
});
if (found.length) {
alert('exists');
}
UPDATE 이하지 않습니다 일을 NaN
하고 -0
그 가치를 위해, 당신은 (대신 사용할 수 있습니다 ===
ES6의 새로운) :
Object.is(obj[key], value);
for...in
루프 사용 :
for (let k in obj) {
if (obj[k] === "test1") {
return true;
}
}
Object.values () 사용할 수 있습니다 .
이
Object.values()
메서드는for...in
루프에서 제공하는 것과 동일한 순서로 주어진 객체의 고유 한 열거 가능한 속성 값의 배열을 반환합니다 (차이점은 for-in 루프가 프로토 타입 체인의 속성도 열거한다는 것입니다).
그런 다음 indexOf () 메서드 를 사용합니다 .
이
indexOf()
메서드는 배열에서 주어진 요소를 찾을 수있는 첫 번째 인덱스를 반환하거나없는 경우 -1을 반환합니다.
예를 들면 :
Object.values(obj).indexOf("test`") >= 0
더 자세한 예는 다음과 같습니다.
var obj = {
"a": "test1",
"b": "test2"
}
console.log(Object.values(obj).indexOf("test1")); // 0
console.log(Object.values(obj).indexOf("test2")); // 1
console.log(Object.values(obj).indexOf("test1") >= 0); // true
console.log(Object.values(obj).indexOf("test2") >= 0); // true
console.log(Object.values(obj).indexOf("test10")); // -1
console.log(Object.values(obj).indexOf("test10") >= 0); // false
이 모든 예제를 사용하여 테스트를 수행했으며 nodejs v8.11.2 에서 실행했으며 최선의 선택을위한 가이드로 사용했습니다.
let i,tt;
const obj = { a: 'test1', b: 'test2' , c: 'test3' , d: 'test4' , e: 'test5' , f: 'test6' };
console.time("test1")
i=0;
for(;i<1000000;i=i+1){
if (Object.values(obj).indexOf('test4') > -1) {
tt = true;
}
}
console.timeEnd("test1")
console.time("test1.1")
i=0;
for(;i<1000000;i=i+1){
if (~Object.values(obj).indexOf('test4')) {
tt = true;
}
}
console.timeEnd("test1.1")
console.time("test2")
i=0;
for(;i<1000000;i=i+1){
if (Object.values(obj).includes('test4')) {
tt = true;
}
}
console.timeEnd("test2")
console.time("test3")
i=0;
for(;i<1000000;i=i+1){
for(const item in obj){
if(obj[item] == 'test4'){
tt = true;
break;
}
}
}
console.timeEnd("test3")
console.time("test3.1")
i=0;
for(;i<1000000;i=i+1){
for(const [item,value] in obj){
if(value == 'test4'){
tt = true;
break;
}
}
}
console.timeEnd("test3.1")
console.time("test4")
i=0;
for(;i<1000000;i=i+1){
tt = Object.values(obj).some( (val,val2) => {
return val == "test4"
});
}
console.timeEnd("test4")
console.time("test5")
i=0;
for(;i<1000000;i=i+1){
const arr = Object.keys(obj);
const len = arr.length;
let i2=0;
for(;i2<len;i2=i2+1){
if(obj[arr[i2]]=="test4"){
tt = true;
break;
}
}
}
console.timeEnd("test5")
내 서버의 출력
test1: 272.325ms
test1.1: 246.316ms
test2: 251.980ms
test3: 73.284ms
test3.1: 102.029ms
test4: 339.299ms
test5: 85.527ms
이것을 시도 할 수 있습니다.
function checkIfExistingValue(obj, key, value) {
return obj.hasOwnProperty(key) && obj[key] === value;
}
var test = [{name : "jack", sex: F}, {name: "joe", sex: M}]
console.log(test.some(function(person) { return checkIfExistingValue(person, "name", "jack"); }));
한 라이너에 대해
exist=Object.values(obj).includes("test1");
console.log(exist);
가장 짧은 ES6 + 1 개 라이너 :
let exist = Object.values(obj).includes("test1");
var obj = {"a": "test1", "b": "test2"};
var getValuesOfObject = Object.values(obj)
for(index = 0; index < getValuesOfObject.length; index++){
return Boolean(getValuesOfObject[index] === "test1")
}
if( myObj.hasOwnProperty('key') && myObj['key'] === value ){
...
}
이것은 간단한 확인이어야합니다.
예 1
var myObj = {"a": "test1"}
if(myObj.a == "test1") {
alert("test1 exists!");
}
참고URL : https://stackoverflow.com/questions/35948669/how-to-check-if-value-exists-in-object-using-javascript
'Nice programing' 카테고리의 다른 글
Visual Studio는 수정되지 않은 프로젝트를 다시 빌드합니다. (0) | 2020.11.16 |
---|---|
서비스는 현재 제어 메시지를 수락 할 수 없습니다. (0) | 2020.11.16 |
Django : FloatField 또는 DecimalField for Currency? (0) | 2020.11.16 |
숫자 키패드의 keyCode 값? (0) | 2020.11.16 |
Golang에서 http 연결 재사용 (0) | 2020.11.16 |