js:创建一个数组,用于保存数组中重复项的索引

时间:2017-08-16 12:27:43

标签: javascript arrays sorting filter

我正在为以下

寻找js / jquery解决方案

我想检查一个数组是否有重复项,让我们说:

var destRes = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL']

并返回一个包含该值的第一个索引的数组; 例如,对于上述ex,这应该是返回:

var newArr = ['0', '1', '2', '2', '2', '0', '1' ]

BH17 7EP位于索引05,因此在新数组中,05索引应为0BH17 7EP

的第一个实例

TA2 6LL位于索引16,因此在新数组中,16索引应为1TA2 6LL

的第一个实例

3 个答案:

答案 0 :(得分:6)

你可以迭代数组并使用indexOf()它总是返回数组中值的第一个索引。像这样的东西:

var destRes = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL'];

var indexes = destRes.map(x => destRes.indexOf(x));

console.log(indexes);

答案 1 :(得分:0)

您可以使用哈希表映射索引,而不使用Array#indexOf的其他循环。

var array = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL'],
    temp = Object.create(null),
    result = array.map(function (a, i) {
        return a in temp ? temp[a] : temp[a] = i;
    });
    
console.log(result);
console.log(temp);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 2 :(得分:0)

试试这个



var destRes = ['BH17 7EP', 'TA2 6LL', 'OX15 4LJ', 'OX15 4LJ', 'OX15 4LJ', 'BH17 7EP', 'TA2 6LL'];
var newArr = [];
for (var i = (destRes.length - 1); i >= 0; i--) {
  var temp = 0;
  for (var j = 0; j < i; j++) {
    if (destRes[j] == destRes[i]) {
      temp = 1;
      break;
    }
  }
  if (temp == 1) {
    newArr[i] = j;
  } else {
    newArr[i] = i;
  }
}
console.log(newArr);
&#13;
&#13;
&#13;