Javascript 在数组中查找对象并更改其属性(如果我知道它的其他属性)

Javascript 在数组中查找对象并更改其属性(如果我知道它的其他属性),javascript,arrays,object,Javascript,Arrays,Object,我有一个对象数组,我需要一个函数,该函数通过对象属性(id在示例中)查找对象数组,并更改其其他属性(name)。目前,我的实现如下所示: var arrayOfObjects = [{ id: 1, name: 'Alpha' }, { id: 2, name: 'Bravo' }]; var setNameById = function (id, newName) { arrayOfObjects.filter(function(obj) {retur

我有一个对象数组,我需要一个函数,该函数通过对象属性(
id
在示例中)查找对象数组,并更改其其他属性(
name
)。目前,我的实现如下所示:

var arrayOfObjects = [{
    id: 1,
    name: 'Alpha'
}, {
    id: 2,
    name: 'Bravo'
}];

var setNameById = function (id, newName) {
    arrayOfObjects.filter(function(obj) {return obj.id === id;}).name = newName;
};

console.log(JSON.stringify(arrayOfObjects)); // initial array logged
setNameById(2, 'Charlie');
console.log(JSON.stringify(arrayOfObjects)); // initial array logged
我知道问题在于更改filter返回的对象而不是初始对象,但我还没有找到在这种情况下允许访问初始对象的实现,是否有可能或者我需要重新考虑导致我达到这一点的步骤。

使用
Array\forEach
而不是
Array\filter

请注意,应使用
=
=
进行比较,
=
将分配值

Array#forEach
只要有条件就足以更新对象的现有数组

var arrayOfObjects=[{
id:1,
名称:“阿尔法”
}, {
id:2,
名字:“好极了”
}];
var setNameById=函数(id,newName){
var FILTED=arrayOfObjects.filter(函数(obj){
返回obj.id==id;
});
过滤的.forEach(函数(el){
el.name=新名称;
});
返回过滤;
};
log(JSON.stringify(arrayOfObjects));
var filtered=setNameById(2,'Charlie');
log(JSON.stringify(过滤))使用
Array#forEach
over
Array#filter

请注意,应使用
=
=
进行比较,
=
将分配值

Array#forEach
只要有条件就足以更新对象的现有数组

var arrayOfObjects=[{
id:1,
名称:“阿尔法”
}, {
id:2,
名字:“好极了”
}];
var setNameById=函数(id,newName){
var FILTED=arrayOfObjects.filter(函数(obj){
返回obj.id==id;
});
过滤的.forEach(函数(el){
el.name=新名称;
});
返回过滤;
};
log(JSON.stringify(arrayOfObjects));
var filtered=setNameById(2,'Charlie');

log(JSON.stringify(过滤))使用此选项而不是筛选器。过滤器产生新的阵列

arrayOfObjects.forEach(function(v){
  if (v.id == id) {v.name = newName}
});

用这个代替过滤器。过滤器产生新的阵列

arrayOfObjects.forEach(function(v){
  if (v.id == id) {v.name = newName}
});

过滤器返回一个数组。因此,在您的方法中必须使用
索引

你的方法
var arrayOfObjects=[{
id:1,
名称:“阿尔法”
}, {
id:2,
名字:“好极了”
}];
var setNameById=函数(id,newName){
arrayOfObjects.filter(函数(obj)){
返回obj.id=id;
})[0]。名称=新名称;
};
console.log(JSON.stringify(arrayOfObjects));//已记录初始阵列
setNameById(2,'Charlie');

log(JSON.stringify(arrayOfObjects))过滤器返回一个数组。因此,在您的方法中必须使用
索引

你的方法
var arrayOfObjects=[{
id:1,
名称:“阿尔法”
}, {
id:2,
名字:“好极了”
}];
var setNameById=函数(id,newName){
arrayOfObjects.filter(函数(obj)){
返回obj.id=id;
})[0]。名称=新名称;
};
console.log(JSON.stringify(arrayOfObjects));//已记录初始阵列
setNameById(2,'Charlie');

log(JSON.stringify(arrayOfObjects))var arrayOfObjects=[{id:1,名称:'Alpha'},{id:2,名称:'Bravo'}];var setNameById=function(id,newName){arrayOfObjects.filter(function(obj){return obj.id==id;})[0]。name=newName;};console.log(JSON.stringify(arrayOfObjects));//初始数组记录setNameById(2,'Charlie');log(JSON.stringify(arrayOfObjects));Array.filter()将返回数组,该数组包含在第0个索引处具有指定ID的元素。使用[0]。名称设置指定ID的名称。您的筛选器比较是“obj.ID=ID”,并且必须是“obj.ID==ID”。我用这个进行了测试,效果很好:arrayOfObjects.filter(函数(obj){return obj.id=id;})[0].name=newNamevar-arrayOfObjects=[{id:1,name:'Alpha'},{id:2,name:'Bravo'}];var setNameById=function(id,newName){arrayOfObjects.filter(function(obj){return obj.id==id;})[0]。name=newName;};console.log(JSON.stringify(arrayOfObjects));//初始数组记录setNameById(2,'Charlie');log(JSON.stringify(arrayOfObjects));Array.filter()将返回数组,该数组包含在第0个索引处具有指定ID的元素。使用[0]。名称设置指定ID的名称。您的筛选器比较是“obj.ID=ID”,并且必须是“obj.ID==ID”。我用它进行了测试,效果很好:arrayOfObjects.filter(函数(obj){return obj.id=id;})[0].name=newNameNp。我很高兴这对你有帮助。我很高兴这对你有帮助。