【问题标题】:finding index of an object inside an array of object在对象数组中查找对象的索引
【发布时间】:2019-12-03 08:40:38
【问题描述】:

我有这个

arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
x ={name: 'mickey', lastname: 'mouse'}
arr.indexOf(x)

为什么 arr.indexOf(x) 返回 -1? 是否有另一种解决方案可以在对象数组中查找对象的索引?

【问题讨论】:

    标签: javascript arrays reactjs object indexof


    【解决方案1】:

    由于您有对象数组,因此无法直接使用indexOf() 来获取该数组中该特定对象的索引。您需要使用findIndex(),以便当数组中有匹配的对象时,它返回该对象的相应索引,否则-1

    arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
    x ={name: 'mickey', lastname: 'mouse'}
    console.log(arr.findIndex((obj) => obj.name == x.name && obj.lastname === x.lastname));

    【讨论】:

    • @RaydenC 如果对您有帮助,您可以勾选答案。很高兴帮助:)
    【解决方案2】:

    indexOf() 检查数组内对象的引用。由于您正在创建一个新对象并将其作为参数传递给 indexOf() 它与数组内对象的引用不匹配,因此它失败了。

    let arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
    arr.indexOf(arr[1])
    

    而此代码将按预期返回 1,因为引用相同。

    @Ankit 给出的解决方案

    arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
    x ={name: 'mickey', lastname: 'mouse'}
    console.log(arr.findIndex((obj) => obj.name == x.name && obj.lastname === x.lastname));
    

    【讨论】:

      【解决方案3】:

      使用简单的循环

      arr = [{name: 'pippo',lastname: 'p'},{name: 'mickey',lastname: 'mouse'}]
      x ={name: 'mickey', lastname: 'mouse'}
      
      
      for(let i=0;i< arr.length;i++){
        if(JSON.stringify(arr[i])===JSON.stringify(x))
         console.log(i)
      }

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-01-24
        • 1970-01-01
        • 1970-01-01
        • 2017-02-21
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多