如何获取数组中重复元素的索引?

时间:2018-04-17 12:50:47

标签: javascript arrays

例如,我需要找到arr count中每个可重复element的{​​{1}},它与前一个元素重复。

现在我创建了这个函数,newArr我的唯一身份filter加倍,但我还需要捕获这些elements的每个index,这些都是重复的......现在我只获得了最后一次重复elements的{​​{1}}。

last index

3 个答案:

答案 0 :(得分:3)

使用数组初始化obj[newAr],然后推送索引。

注意:使用Array.forEach()代替Array.map(),因为forEach用于副作用。



var newArr = ["abc", "abc", "abc", "d", "et", "d", "et", "zzz"];

function calc(newArr) {
  var obj = {};

  newArr.forEach((newAr, index) => {
    // init with array if the key is falsy (undefined in this case)
    obj[newAr] = obj[newAr] || []; 
    
    // push the current index into the array
    obj[newAr].push(index);
  });


  return obj;
};


console.log(calc(newArr));




答案 1 :(得分:0)

尝试以下



var newArr = ["abc", "abc", "abc", "d", "et", "d", "et", "zzz"];
function calc(newArr) {
    var obj = {};
    newArr.map((newAr, index) => {
            obj[newAr] = obj[newAr] || []; 
            obj[newAr].push(index);
        });
    return obj;
};

console.log(calc(newArr));




答案 2 :(得分:0)

您可以传播收集的索引或使用空数组进行传播(spread syntax ...)并获取indices对象的实际元素。

BTW,在块语句或函数体之后,你不需要分号,而不是Array#mapArray#forEach,因为你需要迭代这些项,但你不使用返回的数组map

function calc(array) {
    var indices = {};
    array.forEach((v, i) => indices[v] = [...indices[v] || [], i]);
    return indices;
}

var newArr = ["abc", "abc", "abc", "d", "et", "d", "et", "zzz"];

console.log(calc(newArr));