使用javascript的几个数组的IndexOf数组

时间:2017-07-20 09:27:27

标签: javascript

我有这样一个阵列:

var array = [ [1,2] , [2,2,2] , 3 , [3,4] ];

所以我想使用indexOf来拼接元素。

示例:

var index = array.indexOf( [2,2,2] );
array.splice(index, 1)

Expect =>

array = [ [1,2] , 3 , [3,4] ]

但问题是索引返回-1(假值)..如何解决?

4 个答案:

答案 0 :(得分:6)

问题是,你有两个具有相同基元的数组,但数组不相等。

比较适用于对象而不是内部的值。



console.log([2, 2, 2] === [2, 2, 2]); // false

var array = [2, 2, 2];
console.log(array === array);         // true




如果使用对象的相同引用搜索相同数组,则可获得正确的索引。



var search = [2, 2, 2],                  // array to serach for
    array = [[1, 2], search, 3, [3, 4]], // array with search array
    index = array.indexOf(search);       // get the index

array.splice(index, 1); 

console.log(array); // [[1, 2], 3, [3, 4]]




在ES5中,您可以搜索索引并使用搜索对象的字符串版本来检查Array#some



var array = [[1, 2], [2, 2, 2], 3, [3, 4]],
    search = [2, 2, 2],
    index = -1;

array.some(function(a, i) {
    if (JSON.stringify(a) === JSON.stringify(search)) {
        index = i;
        return true;
    }
});

if (index !== -1) {
    array.splice(index, 1);
}
console.log(array);




ES6与Array#findIndex



var array = [[1, 2], [2, 2, 2], 3, [3, 4]],
    search = [2, 2, 2],
    index = array.findIndex(a => JSON.stringify(a) === JSON.stringify(search));

if (index !== -1) {
    array.splice(index, 1);
}
console.log(array)




答案 1 :(得分:0)

如果您可以使用库,则可以使用公开lodash功能的reject库。

这是一个片段:



var array = [ [1,2] , [2,2,2] , 3 , [3,4] ];
var result = _.reject(array, [2,2,2]);
console.log(result);

<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/4.17.4/lodash.min.js"></script>
&#13;
&#13;
&#13;

答案 2 :(得分:0)

var array = [[1, 2], [2, 2, 2], 3, [3, 4]];
var index = array.findIndex(a => JSON.stringify(a) === "[2,2,2]");
    alert(index);
if (index > -1) {
    array.splice(index, 1);
}
alert(array)

希望这有帮助!

答案 3 :(得分:0)

indexOf 不起作用,因为它使用严格相等,因此除非您对要查找的数组有引用,否则无法在数组中找到数组。

作为替代方案,您可以使用普通的旧版本3 进行循环并比较字符串化的值:

var array = [ [1,2] , [2,2,2] , 3 , [3,4] ];

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

console.log(findIndex(array, [2,2,2])); // 1