这个数组的每一项都是一些数字:
var items = Array(523,3452,334,31, ...5346);
如何用新物品替换某些物品?
例如,我们想替换3452
为1010
,我们将如何做到这一点?
这个数组的每一项都是一些数字:
var items = Array(523,3452,334,31, ...5346);
如何用新物品替换某些物品?
例如,我们想替换3452
为1010
,我们将如何做到这一点?
var index = items.indexOf(3452);
if (index !== -1) {
items[index] = 1010;
}
此外,建议您不要使用构造函数方法来初始化数组。相反,使用文字语法:
var items = [523, 3452, 334, 31, 5346];
~
如果您喜欢简洁的 JavaScript 并想缩短-1
比较,您也可以使用运算符:
var index = items.indexOf(3452);
if (~index) {
items[index] = 1010;
}
有时我什至喜欢写一个contains
函数来抽象这个检查,让我更容易理解发生了什么。很棒的是,这对数组和字符串都有效:
var contains = function (haystack, needle) {
return !!~haystack.indexOf(needle);
};
// can be used like so now:
if (contains(items, 3452)) {
// do something else...
}
从用于字符串的 ES6/ES2015 开始,并为用于数组的 ES2016 提议,您可以更轻松地确定源是否包含另一个值:
if (haystack.includes(needle)) {
// do your thing
}
该Array.indexOf()
方法将替换第一个实例。要获取每个实例,请使用Array.map()
:
a = a.map(function(item) { return item == 3452 ? 1010 : item; });
当然,这会创建一个新数组。如果您想就地进行,请使用Array.forEach()
:
a.forEach(function(item, i) { if (item == 3452) a[i] = 1010; });
我建议的解决方案是:
items.splice(1, 1, 1010);
拼接操作将删除 1 个项目,从数组中的位置 1 开始(即3452
),并将其替换为新项目1010
。
@gilly3 的回答很棒。
替换对象数组中的对象,保持元素的顺序不变
当我从服务器获取数据时,我更喜欢以下方式将新的更新记录更新到我的记录数组中。它使订单保持完整,并且非常直接地使用一个班轮。
users = users.map(u => u.id !== editedUser.id ? u : editedUser);
var users = [
{id: 1, firstname: 'John', lastname: 'Ken'},
{id: 2, firstname: 'Robin', lastname: 'Hood'},
{id: 3, firstname: 'William', lastname: 'Cook'}
];
var editedUser = {id: 2, firstname: 'Michael', lastname: 'Angelo'};
users = users.map(u => u.id !== editedUser.id ? u : editedUser);
console.log('users -> ', users);
使用indexOf
找到的元素。
var i = items.indexOf(3452);
items[i] = 1010;