【问题标题】:Find indeces with duplicates查找具有重复项的索引
【发布时间】:2021-08-25 10:44:21
【问题描述】:

我会发现从 array1 到 array2 的 Indeces 有重复项。

var array1 =
[ 
 {homeTeam: 'Yokohama FC'},
 {homeTeam: 'Shonan Bellmare'},
 {homeTeam: 'K. Frontale'},
 {homeTeam: 'Cerezo Osaka'},
 {homeTeam: 'Nagoya G.'},
 {homeTeam: 'Gamba Osaka'}
]
var array2 =
[ 
 {homeTeam: 'Yokohama FC'},
 {homeTeam: 'Shonan Bellmare'},
 {homeTeam: 'K. Frontale'},
 {homeTeam: 'Cerezo Osaka'},
 {homeTeam: 'Nagoya G.'},
 {homeTeam: 'K. Frontale'},
 {homeTeam: 'Cerezo Osaka'},
 {homeTeam: 'Nagoya G.'},
 {homeTeam: 'Gamba Osaka'}
]

我的输出应该是:

[ 
 {homeTeam: 'Yokohama FC', IndexInArr2: [0] },
 {homeTeam: 'Shonan Bellmare', IndexInArr2: [1] },
 {homeTeam: 'K. Frontale', IndexInArr2: [2 , 5] },
 {homeTeam: 'Cerezo Osaka', IndexInArr2: [3 , 6] },
 {homeTeam: 'Nagoya G.', IndexInArr2: [4 , 7] },
 {homeTeam: 'Gamba Osaka', IndexInArr2: [0]}
]

我试图创建一个结果不佳的函数

function findIndex(array, attr, value){
    for(var i = 0; i < array.length; i+=1){
      if(array[i][attr] == value){
      return i
      }
    }
    return -1
}

感谢您的最终回答

【问题讨论】:

    标签: javascript node.js arrays


    【解决方案1】:

    你很接近!不要在找到第一次出现时返回,而是将它们保存在数组中并仅在最后返回。我已经做到了,所以它在找不到时返回一个空数组而不是-1,但是如果需要,您可以测试数组的长度以仍然返回-1,但我认为总是返回一个数组更好一个通用函数。

    function findIndex(array, attr, value){
        const indices = [];
        for(var i = 0; i < array.length; i+=1){
          if(array[i][attr] == value){
             indices.push(i);
          }
        }
        return indices;
    }
    

    【讨论】:

    • 我认为这个解决方案对单点阵列很有用。我试过了,但它不起作用,因为我有两个数组。我还尝试在启动函数中嵌入一个 annidate
    【解决方案2】:

    您也可以使用这种方法。在array1 上运行map,然后将每个项目homeTeam 的值与array2 进行比较,然后使用reduce 对索引进行分组

    const array1 = [
      { homeTeam: "Yokohama FC" },
      { homeTeam: "Shonan Bellmare" },
      { homeTeam: "K. Frontale" },
      { homeTeam: "Cerezo Osaka" },
      { homeTeam: "Nagoya G." },
      { homeTeam: "Gamba Osaka" }
    ];
    const array2 = [
      { homeTeam: "Yokohama FC" },
      { homeTeam: "Shonan Bellmare" },
      { homeTeam: "K. Frontale" },
      { homeTeam: "Cerezo Osaka" },
      { homeTeam: "Nagoya G." },
      { homeTeam: "K. Frontale" },
      { homeTeam: "Cerezo Osaka" },
      { homeTeam: "Nagoya G." },
      { homeTeam: "Gamba Osaka" }
    ];
    
    const result = array1.map((item) => {
      const { homeTeam } = item;
      const result = array2.reduce(
          (accumulator, current, index) =>
          current.homeTeam === homeTeam ? [...accumulator, index] : accumulator,[]);
      return { homeTeam, IndexInArr2: result };
    });
    
    console.log(result);

    【讨论】:

    • @phil 如果有帮助,请考虑将其投票/标记为正确
    猜你喜欢
    • 2021-06-21
    • 2020-06-17
    • 1970-01-01
    • 2022-08-09
    • 2012-09-11
    相关资源
    最近更新 更多