如何选择除第i个元素之外的数组中的所有其他值?

时间:2013-03-12 12:28:17

标签: javascript arrays

我有一个使用表示为

的数组值的函数
 markers[i]

如何选择除此之外的数组中的所有其他值?

这样做的目的是将所有其他Google地图图片重置为原始状态,但通过更改图片突出显示新图片。

7 个答案:

答案 0 :(得分:15)

使用array.splice方法获取排除此元素的元素数组。

这会永久影响数组,如果您不想这样,请先创建一个副本。

var origArray = [0,1,2,3,4,5];
var cloneArray = origArray.slice();
var i = 3 ;

cloneArray.splice(i,1);

document.write(cloneArray.join("---"));

答案 1 :(得分:14)

您可以使用ECMAScript 5 Array.prototype.filter

var items = [1, 2, 3, 4, 5, 6];
var current = 2;

var itemsWithoutCurrent = items.filter(function(x) { return x !== current; });

可以有任何比较逻辑而不是x !== current。例如,您可以比较对象属性。

如果您使用基元,您还可以创建一个自定义函数,如except,它将引入此功能:

Array.prototype.except = function(val) {
    return this.filter(function(x) { return x !== val; });        
}; 

// Usage example:
console.log([1, 2, 3, 4, 5, 6].except(2)); // 1, 3, 4, 5, 6

答案 2 :(得分:4)

您可以使用slice()方法

var fruits = ["Banana", "Orange", "Lemon", "Apple", "Mango"];
var citrus = fruits.slice(1,3);

slice()方法返回数组中的选定元素,作为新的数组对象。

答案 3 :(得分:0)

您还可以在Filter中使用第二个回调参数:

const exceptIndex = 3;
const items = ['item1', 'item2', 'item3', 'item4', 'item5'];
const filteredItems = items.filter((value, index) => exceptIndex !== index);

答案 4 :(得分:0)

使用ECMAScript 5

const array = ['a', 'b', 'c'];
const removeAt = 1;
const newArray = [...array].splice(removeAt, 1);

答案 5 :(得分:0)

此函数将返回一个新数组,其中包含除指定索引处的元素以外的所有元素:

    const everythingBut = (array, i) => { /*takes an array and an index as arguments*/
        let notIArray = []; /*creates new empty array*/
        let beforeI = array.slice(0, i); /*creates subarray of all elements before array[i]*/
        let afterI = array.slice(i+1,); /*creates subarray of all elements after array[i]*/
        notIArray = [...beforeI, ...afterI]; /*add elements before and after array[i] to empty array*/
        return notIArray; /*returns new array with array[i] element excluded*/
    };

例如:

    let array = [1, 2, 4, 7, 9, 11, 2, 6]
    everythingBut(array, 2); /*exclude array[2]*/
    // -> [1, 2, 7, 9, 11, 2, 6]

答案 6 :(得分:0)

另一种方法是使用过滤器和切片数组方法。

let array = [ 1, 2, 3, 4, 5, 6 ];
let leave = 2;

// method 1
console.log(array.filter((e,i) => i !== leave));
// logs [1, 2, 4, 5, 6];

//method 2
console.log([...array.slice(0, leave), ...array.slice(leave+1, array.length)]);
// logs [1, 2, 4, 5, 6];