【问题标题】:Check if at least one specific value exists looking through all inner arrays in an array (JavaScript)检查数组中的所有内部数组是否存在至少一个特定值(JavaScript)
【发布时间】:2022-01-08 01:12:28
【问题描述】:

我有数组 "arr" 包含 2 个对象,每个对象都有数组 "innerArr" 包含 2 或 3 个具有一个值的对象 "每个对象的 val"

let arr = [
  {
    innerArr: [
      { val: "Apple" },
      { val: "Grape" }
    ]
  },
  {
    innerArr: [
      { val: "Peach" },
      { val: "Mango" },
      { val: "Kiwi" }
    ]
  }
];

现在,我想通过 "arr" 数组中的所有内部数组 "innerArr" 检查是否存在至少一个特定值,例如 "Kiwi" "

我创建了代码来检查是否存在至少一个特定值“Kiwi”,它会返回“true”

let result = false;

for(let i = 0; i < arr.length; i++) {
  for(let j = 0; j < arr[i].innerArr.length; j++) {
    if(arr[i].innerArr[j].val == "Kiwi") { // Check if "Kiwi" exists
      result = true;
    }
  }
}

console.log(result); // true

这是完整的可运行代码

let arr = [
  {
    innerArr: [
      { val: "Apple" },
      { val: "Grape" }
    ]
  },
  {
    innerArr: [
      { val: "Peach" },
      { val: "Mango" },
      { val: "Kiwi" }
    ]
  }
];

let result = false;

for(let i = 0; i < arr.length; i++) {
  for(let j = 0; j < arr[i].innerArr.length; j++) {
    if(arr[i].innerArr[j].val == "Kiwi") { // Check if "Kiwi" exists
      result = true;
    }
  }
}

console.log(result); // true

此外,"Strawberry" 就是这种情况,它返回 "false"

let arr = [
  {
    innerArr: [
      { val: "Apple" },
      { val: "Grape" }
    ]
  },
  {
    innerArr: [
      { val: "Peach" },
      { val: "Mango" },
      { val: "Kiwi" }
    ]
  }
];

let result = false;

for(let i = 0; i < arr.length; i++) {
  for(let j = 0; j < arr[i].innerArr.length; j++) {
    if(arr[i].innerArr[j].val == "Strawberry") { // Check if "Strawberry" exists
      result = true;
    }
  }
}

console.log(result); // false

但是,我想用 "Kiwi" 简化这段代码。有什么方法可以让这段代码更简单吗?

let result = false;

for(let i = 0; i < arr.length; i++) {
  for(let j = 0; j < arr[i].innerArr.length; j++) {
    if(arr[i].innerArr[j].val == "Kiwi") { // Check if "Kiwi" exists
      result = true;
    }
  }
}

console.log(result); // true

【问题讨论】:

    标签: javascript arrays json object frontend


    【解决方案1】:

    您可以使用.some

    let arr = [
      {
        innerArr: [
          { val: "Apple" },
          { val: "Grape" }
        ]
      },
      {
        innerArr: [
          { val: "Peach" },
          { val: "Mango" },
          { val: "Kiwi" }
        ]
      }
    ];
    
    let fruit = "Kiwi"
    let result = arr.some(({ innerArr }) => innerArr.some(({val}) => val === fruit))
    
    console.log(result)

    它比你的循环更快,因为.some 在找到搜索结果后停止循环

    【讨论】:

      【解决方案2】:

      let arr = [
        {
          innerArr: [
            { val: "Apple" },
            { val: "Grape" }
          ]
        },
        {
          innerArr: [
            { val: "Peach" },
            { val: "Mango" },
            { val: "Kiwi" }
          ]
        }
      ];
      
      let fruits = arr.flatMap(e => e.innerArr).map(e => e.val)
      
      console.log(fruits)
      console.log(fruits.includes('Kiwi'))

      【讨论】:

        【解决方案3】:

        你可以使用“some()”函数

        let arr = [
          {
            innerArr: [
              { val: "Apple" },
              { val: "Grape" }
            ]
          },
          {
            innerArr: [
              { val: "Peach" },
              { val: "Mango" },
              { val: "Kiwi" }
            ]
          }
        ];
        
        // Check if "Kiwi" exists
        let result = arr.some(v1 => v1.innerArr.some(v2 => v2.val == "Kiwi"));
        console.log(result); // true
        
        // Check if "Strawberry" exists
        result = arr.some(v1 => v1.innerArr.some(v2 => v2.val == "Strawberry"));
        console.log(result); // false

        【讨论】:

          猜你喜欢
          • 2023-04-05
          • 1970-01-01
          • 2010-12-20
          • 1970-01-01
          • 1970-01-01
          • 2022-08-19
          • 2020-07-23
          • 2019-11-22
          • 1970-01-01
          相关资源
          最近更新 更多