对象数组数组 - 查找对象值出现并返回真/假(js)

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 作为最后一个数组元素。如何修改它以仅返回真/假值?

Cer*_*nce 5

使用 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)