所以我一直在努力寻找解决方案,但没有运气。
const nameTest = 'testName';
const test = {
RANDOM_ONE: {
NAME: 'testName',
SOMETHING: {...}
},
RANDOM_TWO: {
NAME: 'Name',
SOMETHING: {...}
}
}
有没有一种简单易用的方法可以比较nameTest和NAME键,而无需知道RANDOM_X是什么来访问NAME?
答案 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) );