比较嵌套对象中的值

时间:2018-10-06 12:19:52

标签: javascript object compare key

所以我一直在努力寻找解决方案,但没有运气。

const nameTest = 'testName';
const test = {
   RANDOM_ONE: {
       NAME: 'testName',
       SOMETHING: {...}
   },
   RANDOM_TWO: {
       NAME: 'Name',
       SOMETHING: {...}
   }
}

有没有一种简单易用的方法可以比较nameTest和NAME键,而无需知道RANDOM_X是什么来访问NAME?

5 个答案:

答案 0 :(得分:3)

您可以使用Object.keys()获取所有键的数组。然后遍历数组以检查属性:

const nameTest = 'testName';
const test = {
   RANDOM_ONE: {
       NAME: 'testName',
       SOMETHING: {}
   },
   RANDOM_TWO: {
       NAME: 'Name',
       SOMETHING: {}
   }
}
let testKeys = Object.keys(test);
testKeys.forEach(function(k){
  console.log(test[k].NAME == nameTest);
});

答案 1 :(得分:0)

您可以在循环中使用for ...:

for (let key in test) {
  if (test[key].NAME === nameTest) {
    // do something
  }
}

答案 2 :(得分:0)

我希望我们知道测试的2个等级是您的目标。您可以编写一个函数来比较名称键。

function compare(obj, text){
 for(let x in obj){
   if(obj.x.name == text) return true;
   else ;
 }
}

然后使用您的对象和字符串调用函数。

let a = compare(test, nameTest);

注意:这只会比较对象是否包含nameTest字符串。

答案 3 :(得分:0)

var obj= test.filter(el){
    if(el.NAME==nameTest)
    {
        return el;
    }
 }
var x= obj!=null?true:false;

答案 4 :(得分:0)

您可以使用find

  

find方法对的每个索引执行一次回调函数   数组,直到找到其中回调返回真值的数组为止。如果   找到这样的元素,find立即返回该元素的值   元件。否则,find返回未定义的值。

因此,与使用forEach遍历整个对象相比,它的内存效率更高,因为如果回调函数找到该值,则find将立即返回。打破forEach的循环是不可能的。在文档中:

  

除了通过以下方式之外,没有其他方法可以停止或中断forEach()循环:   引发异常。如果您需要这种行为,请使用forEach()方法   是错误的工具。

1。如果要获取整个对象

var nameTest = 'testName';
var test = {
   RANDOM_ONE: {
       NAME: 'testName',
       SOMETHING: {}
   },
   RANDOM_TWO: {
       NAME: 'Name',
       SOMETHING: {}
   }
};

function getObjectByNameProperty(object, property) {
    var objectKey = Object.keys(object)
        .find(key => object[key].NAME === property);
    return object[objectKey];
}

var object = getObjectByNameProperty(test, nameTest);
console.log(object);

2。如果您只想测试对象是否具有给定的名称值

var nameTest = 'testName';
var test = {
   RANDOM_ONE: {
       NAME: 'testName',
       SOMETHING: {}
   },
   RANDOM_TWO: {
       NAME: 'Name',
       SOMETHING: {}
   }
};

function doesObjectHaveGivenName(object, nameValue) {
    var objectKey = Object.keys(object)
        .find(key => object[key].NAME === nameValue);
    return objectKey ? true : false;
}

console.log( doesObjectHaveGivenName(test, nameTest) );