我有一个包含2个项目的对象,每个项目都包含一个数字数组。
selected: {
item1: [1, 2, 3],
item2: [4, 5, 6]
}
在一个函数中,如果传递给它的数字不在任何一项中,我需要做一些事情。因此,例如,如果传递6则不执行任何操作,但如果传递了7则执行某些操作。
如果其中一个项目包含数字
,则返回true和falseObject.entries(selected).forEach((itemParent)=>{
console.log(
itemParent[1].some((itemChild)=>{
return itemChild === no;
})
)
});
但是当我添加下面的代码时,我收到一个错误:Uncaught TypeError: Cannot read property 'some' of undefined
Object.entries(selected)
.forEach((itemParent)=>{
itemParent[1].some((itemChild)=>{
return itemChild === no;
})
}
).some((item)=>{
return item === true;
});
我正在使用bable,所以我可以使用最新的ES6语法。
答案 0 :(得分:2)
假设对象与给定数据不同,那么您可以嵌套some
并检查。然后返回检查结果。
return Object
.entries(selected)
.some(itemParent => itemParent[1].some(itemChild => itemChild === no))
答案 1 :(得分:2)
你太复杂了。顺便说一句,您甚至使用ES2017功能,因此请检查Babel是否已相应配置。
以下是您问题的简短解决方案:
const no = 7;
const selected = {
item1: [1, 2, 3],
item2: [4, 5, 6]
};
const containsNumber = Object.values(selected).some(array => array.includes(no));
console.log(containsNumber);

您收到错误消息的原因是forEach
实际上没有返回任何内容。
答案 2 :(得分:1)
您的第二个示例中出现此错误,因为forEach
未返回数组而undefined
,而undefined
没有任何名为some
的方法
答案 3 :(得分:1)
您可以将Object.values
与concat
功能结合使用,以获得更简单的方法。
let selected= {
item1: [1, 2, 3],
item2: [4, 5, 6]
};
let contains= [].concat(...Object.values(selected)).includes(7);
console.log(contains);

答案 4 :(得分:0)
我认为这是一种更简单的方法:
var selected = {
item1: [1, 2, 3],
item2: [4, 5, 6]
}
function exists(inputNumber) {
return Object.keys(selected).some(key => selected[key].some(number => number === inputNumber));
}
console.log(exists(6));
console.log(exists(7));

使用Object.values更简单:
var selected = {
item1: [1, 2, 3],
item2: [4, 5, 6]
}
function exists(inputNumber) {
return Object.values(selected).some(arr => arr.some(number => number === inputNumber));
}
console.log(exists(6));
console.log(exists(7));