40

我有一个使用表示为的数组值的函数

 markers[i]

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

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

4

7 回答 7

25

用于Array​.prototype​.splice获取除此之外的元素数组。

这会永久影响阵列,因此如果您不希望这样做,请先创建一个副本。

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

cloneArray.splice(i,1);

console.log(cloneArray.join("---"));
于 2013-03-12T12:30:40.260 回答
24

您可以使用 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
于 2016-02-17T11:44:22.177 回答
12

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

const exceptIndex = 3;
const items = ['item1', 'item2', 'item3', 'item4', 'item5'];
const filteredItems = items.filter((value, index) => exceptIndex !== index);
于 2019-07-04T10:09:52.673 回答
5

您可以使用 slice()方法

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

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

于 2013-03-12T12:32:44.430 回答
1

另一种方法是使用 filter 和 slice Array 方法。

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];
于 2021-03-30T19:07:24.110 回答
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]
于 2020-09-21T21:51:43.967 回答
-1

使用 ECMAScript 5

const array = ['a', 'b', 'c'];
const removeAt = 1;
const newArray = [...array].splice(removeAt, 1);
于 2020-03-30T14:17:47.993 回答