此数组的每个项目都是一些数字。
var items = Array(523,3452,334,31, ...5346);
如何使用新数字替换数组中的某些数字?
例如,我们想用1010替换3452,我们将如何做到这一点?
答案 0 :(得分:355)
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
}
答案 1 :(得分:77)
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; });
答案 2 :(得分:23)
使用indexOf查找元素。
var i = items.indexOf(3452);
items[i] = 1010;
答案 3 :(得分:18)
使用for
循环轻松完成。
for (var i = 0; i < items.length; i++)
if (items[i] == 3452)
items[i] = 1010;
答案 4 :(得分:12)
您可以使用索引编辑任意数量的列表
例如:
items[0] = 5;
items[5] = 100;
答案 5 :(得分:12)
在仅一行中替换或更新数组项的最佳方法
array.splice(array.indexOf(valueToReplace), 1, newValue)
例如:
let items = ['JS', 'PHP', 'RUBY'];
let replacedItem = items.splice(items.indexOf('RUBY'), 1, 'PYTHON')
console.log(replacedItem) //['RUBY']
console.log(items) //['JS', 'PHP', 'PYTHON']
执行相同操作的另一种简单方法是:
items[items.indexOf(oldValue)] = newValue
答案 6 :(得分:10)
@ gilly3的答案很棒。
如何将此扩展为对象数组
当我从服务器获取数据时,我更喜欢采用以下方法将新的更新记录更新到记录数组中。它使订单完整无缺,并且非常直接。
users = users.map(u => u.id !== editedUser.id ? u : editedUser);
var users = [
{id: 1, firstname: 'John', lastname: 'Sena'},
{id: 2, firstname: 'Serena', lastname: 'Wilham'},
{id: 3, firstname: 'William', lastname: 'Cook'}
];
var editedUser = {id: 2, firstname: 'Big Serena', lastname: 'William'};
users = users.map(u => u.id !== editedUser.id ? u : editedUser);
console.log('users -> ', users);
答案 7 :(得分:9)
ES6 方式:
const items = Array(523, 3452, 334, 31, ...5346);
我们想将3452
替换为1010
,解决方案:
const newItems = items.map(item => item === 3452 ? 1010 : item);
当然,这个问题已经存在很多年了,现在我只喜欢使用不可变解决方案,对于ReactJS
来说,它确实很棒。
对于频繁使用,我提供以下功能:
const itemReplacer = (array, oldItem, newItem) =>
array.map(item => item === oldItem ? newItem : item);
答案 8 :(得分:6)
我建议的解决方案是:
items.splice(1, 1, 1010);
拼接操作将从数组中的位置1(即3452
)删除1个项目,并将其替换为新的项目1010
。
答案 9 :(得分:3)
如果使用复杂的对象(甚至是简单的对象)并且可以使用es6,那么Array.prototype.findIndex
是一个很好的对象。对于OP的阵列,他们可以做到,
const index = items.findIndex(x => x === 3452)
items[index] = 1010
对于更复杂的对象,这确实很有意思。例如,
const index =
items.findIndex(
x => x.jerseyNumber === 9 && x.school === 'Ohio State'
)
items[index].lastName = 'Utah'
items[index].firstName = 'Johnny'
答案 10 :(得分:3)
替换可以一行完成:
var items = Array(523, 3452, 334, 31, 5346);
items[items.map((e, i) => [i, e]).filter(e => e[1] == 3452)[0][0]] = 1010
console.log(items);
或创建一个可重用的函数:
Array.prototype.replace = function(t, v) {
if (this.indexOf(t)!= -1)
this[this.map((e, i) => [i, e]).filter(e => e[1] == t)[0][0]] = v;
};
//Check
var items = Array(523, 3452, 334, 31, 5346);
items.replace(3452, 1010);
console.log(items);
答案 11 :(得分:2)
最简单的方法是使用像underscorejs和map方法这样的库。
var items = Array(523,3452,334,31,...5346);
_.map(items, function(num) {
return (num == 3452) ? 1010 : num;
});
=> [523, 1010, 334, 31, ...5346]
答案 12 :(得分:2)
var items = Array(523,3452,334,31,5346);
如果您知道该值,则使用
items[items.indexOf(334)] = 1010;
如果您想知道该值是否存在,请使用
var point = items.indexOf(334);
if (point !== -1) {
items[point] = 1010;
}
如果您知道地点(位置),那么直接使用,
items[--position] = 1010;
如果您想要替换少数元素,并且您只知道起始位置,则
items.splice(2, 1, 1010, 1220);
了解有关.splice
的更多信息答案 13 :(得分:1)
一种用于替换javascript中数组元素的功能性方法:
const replace = (array, index, ...items) => [...array.slice(0, index), ...items, ...array.slice(index + 1)];
答案 14 :(得分:1)
如果有人想着如何从数组的索引中替换对象,这是一个解决方案。
通过对象的ID查找对象的索引:
const index = items.map(item => item.id).indexOf(objectId)
使用Object.assign()方法替换对象:
Object.assign(items[index], newValue)
答案 15 :(得分:1)
var index = Array.indexOf(Array value);
if (index > -1) {
Array.splice(index, 1);
}
从这里您可以从数组中删除一个基于相同索引的特定值 您可以在数组中插入值。
Array.splice(index, 0, Array value);
答案 16 :(得分:1)
以下是可重用函数的基本答案:
function arrayFindReplace(array, findValue, replaceValue){
while(array.indexOf(findValue) !== -1){
let index = array.indexOf(findValue);
array[index] = replaceValue;
}
}
答案 17 :(得分:0)
presentPrompt(id,productqty) {
let alert = this.forgotCtrl.create({
title: 'Test',
inputs: [
{
name: 'pickqty',
placeholder: 'pick quantity'
},
{
name: 'state',
value: 'verified',
disabled:true,
placeholder: 'state',
}
],
buttons: [
{
text: 'Ok',
role: 'cancel',
handler: data => {
console.log('dataaaaname',data.pickqty);
console.log('dataaaapwd',data.state);
for (var i = 0; i < this.cottonLists.length; i++){
if (this.cottonLists[i].id == id){
this.cottonLists[i].real_stock = data.pickqty;
}
}
for (var i = 0; i < this.cottonLists.length; i++){
if (this.cottonLists[i].id == id){
this.cottonLists[i].state = 'verified';
}
}
//Log object to console again.
console.log("After update: ", this.cottonLists)
console.log('Ok clicked');
}
},
]
});
alert.present();
}
As per your requirement you can change fields and array names.
thats all. Enjoy your coding.
答案 18 :(得分:0)
最简单的方法是这样。
var items = Array(523,3452,334,31, 5346);
var replaceWhat = 3452, replaceWith = 1010;
if ( ( i = items.indexOf(replaceWhat) ) >=0 ) items.splice(i, 1, replaceWith);
console.log(items);
>>> (5) [523, 1010, 334, 31, 5346]
答案 19 :(得分:0)
使用ES6扩展运算符和.slice
方法替换列表中元素的一种不变方法。
const arr = ['fir', 'next', 'third'], item = 'next'
const nextArr = [
...arr.slice(0, arr.indexOf(item)),
'second',
...arr.slice(arr.indexOf(item) + 1)
]
验证是否有效
console.log(arr) // [ 'fir', 'next', 'third' ]
console.log(nextArr) // ['fir', 'second', 'third']
答案 20 :(得分:0)
我使用for循环并遍历原始数组并将匹配区域的位置添加到另一个数组中,然后遍历该数组并在原始数组中对其进行更改,然后返回它,来解决此问题,我使用了arrow函数,但是常规功能也可以工作。
var replace = (arr, replaceThis, WithThis) => {
if (!Array.isArray(arr)) throw new RangeError("Error");
var itemSpots = [];
for (var i = 0; i < arr.length; i++) {
if (arr[i] == replaceThis) itemSpots.push(i);
}
for (var i = 0; i < itemSpots.length; i++) {
arr[itemSpots[i]] = WithThis;
}
return arr;
};
答案 21 :(得分:0)
这里是一个班轮。假定该项目将在数组中。
var items = [523, 3452, 334, 31, 5346]
var replace = (arr, oldVal, newVal) => (arr[arr.indexOf(oldVal)] = newVal, arr)
console.log(replace(items, 3452, 1010))
答案 22 :(得分:0)
如果您想要简单的制糖sintax oneliner,则可以:
(elements = elements.filter(element => element.id !== updatedElement.id)).push(updatedElement);
赞:
let elements = [ { id: 1, name: 'element one' }, { id: 2, name: 'element two'} ];
const updatedElement = { id: 1, name: 'updated element one' };
如果没有ID,则可以将元素字符串化:
(elements = elements.filter(element => JSON.stringify(element) !== JSON.stringify(updatedElement))).push(updatedElement);
答案 23 :(得分:0)
items[items.indexOf(3452)] = 1010
非常适合简单的交换。尝试下面的代码段
const items = Array(523, 3452, 334, 31, 5346);
console.log(items)
items[items.indexOf(3452)] = 1010
console.log(items)
答案 24 :(得分:0)
首先,像这样重写你的数组:
var items = [523,3452,334,31,...5346];
接下来,通过索引号访问数组中的元素。确定索引号的公式为:n-1
要替换数组中的第一项(n=1)
,请写:
items[0] = Enter Your New Number;
在您的示例中,号码3452
位于第二个位置(n=2)
。因此,确定索引号的公式为2-1 = 1
。因此,请编写以下代码,将3452
替换为1010
:
items[1] = 1010;
答案 25 :(得分:-1)
在此附上了替换数组中所有项目的代码
var temp_count=0;
layers_info_array.forEach(element => {
if(element!='')element=JSON.parse(element);//change this line if you want other change method, here I changed string to object
layers_info_array[temp_count]=element;
temp_count++;
});