hei*_*584 -1 javascript arrays
我有对象数组的数组,如下所示:
[
[
{
id: 1,
itemName: 'xxx',
...
},
{
id: 1,
itemName: 'yyy',
...
},
...
],
[
{
id: 2,
itemName: 'aaa',
...
},
{
id: 2,
itemName: 'kkk',
...
},
...
],
[
{
id: 3,
itemName: 'kkk',
...
},
{
id: 3,
itemName: 'yyy',
...
},
...
]
]
Run Code Online (Sandbox Code Playgroud)
我试图检查数组内对象中的任何 itemName 是否等于给定的字符串,但我坚持将这些数组与此类对象保存在一个数组中的解决方案。这是我的解决方案:
function isNameAcrossData(givenString){
return arr.map(arrItem =>
arrItem.find(item => item.itemId === givenString)
);
}
Run Code Online (Sandbox Code Playgroud)
我的解决方案不返回布尔值,而只返回一个带有对象的数组,其中包含 givenString 和 undefined 作为最后一个数组元素。如何修改它以仅返回真/假值?
使用 a .someinside a .some, 查看某些数组中是否至少有一个与条件匹配的元素:
const isNameAcrossData = givenString => arr.some(
subarr => subarr.some(
({ itemName }) => itemName === givenString
)
);
const arr=[[{id:1,itemName:"xxx"},{id:1,itemName:"yyy"}],[{id:2,itemName:"aaa"},{id:2,itemName:"kkk"}],[{id:3,itemName:"kkk"},{id:3,itemName:"yyy"}]];
console.log(isNameAcrossData('xxx'));
console.log(isNameAcrossData('doesntexist'));Run Code Online (Sandbox Code Playgroud)
您也可以先展平外部数组:
const isNameAcrossData = givenString => arr.flat().some(
({ itemName }) => itemName === givenString
);
const arr=[[{id:1,itemName:"xxx"},{id:1,itemName:"yyy"}],[{id:2,itemName:"aaa"},{id:2,itemName:"kkk"}],[{id:3,itemName:"kkk"},{id:3,itemName:"yyy"}]];
console.log(isNameAcrossData('xxx'));
console.log(isNameAcrossData('doesntexist'));Run Code Online (Sandbox Code Playgroud)