比较嵌套对象中的值



所以我一直在试图找到解决这个问题的方法,但没有运气。

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

有没有任何简单易行的方法,我可以在不知道RANDOM_X是什么的情况下比较 nameTest 和 NAME 键以访问 NAME?

您可以使用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);
});

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

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

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

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

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

let a = compare(test, nameTest);

注意:这将比较对象,以确定它是否包含 nameTest 字符串。

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

你可以使用find。

find 方法对 数组,直到找到回调返回 true 值的数组。如果 找到这样的元素,find 立即返回该元素的值 元素。否则,查找未定义的返回。

因此,它比使用 forEach 循环整个对象更节省内存,因为如果回调函数找到值,find 会立即返回。打破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) );

相关内容

  • 没有找到相关文章

最新更新