如何改变使用JavaScript或jQuery数组内的对象的值?

下面的代码来自jQuery UI自动完成:

var projects = [ { value: "jquery", label: "jQuery", desc: "the write less, do more, JavaScript library", icon: "jquery_32x32.png" }, { value: "jquery-ui", label: "jQuery UI", desc: "the official user interface library for jQuery", icon: "jqueryui_32x32.png" }, { value: "sizzlejs", label: "Sizzle JS", desc: "a pure-JavaScript CSS selector engine", icon: "sizzlejs_32x32.png" } ]; 

例如,我想改变jquery-uidesc值 。 我怎样才能做到这一点?

另外,有没有更快的方法来获取数据? 我的意思是给对象一个名字来获取它的数据,就像数组内的对象? 所以这将是像jquery-ui.jquery-ui.desc = ....

你必须像这样在数组中search:

 function changeDesc( value, desc ) { for (var i in projects) { if (projects[i].value == value) { projects[i].desc = desc; break; //Stop this loop, we found it! } } } 

并使用它

 var projects = [ ... ]; changeDesc ( 'jquery-ui', 'new description' ); 

更新:

为了让它更快:

 var projects = { jqueryUi : { value: 'lol1', desc: 'lol2' } }; projects.jqueryUi.desc = 'new string'; 

(根据Frédéric的评论,你不应该在对象关键字中使用连字符,或者你应该使用“jquery-ui”和项目[“jquery-ui”]符号)。

这很简单

  • 使用findIndex方法find对象的索引。
  • 将索引存储在variables中。
  • 做一个像这样的简单更新: yourArray[indexThatyouFind]
 //Initailize array of objects. let myArray = [ {id: 0, name: "Jhon"}, {id: 1, name: "Sara"}, {id: 2, name: "Domnic"}, {id: 3, name: "Bravo"} ], //Find index of specific object using findIndex method. objIndex = myArray.findIndex((obj => obj.id == 1)); //Log object to Console. console.log("Before update: ", myArray[objIndex]) //Update object's name property. myArray[objIndex].name = "Laila" //Log object to console again. console.log("After update: ", myArray[objIndex]) 

您可以使用$ .each()遍历数组并find您感兴趣的对象:

 $.each(projects, function() { if (this.value == "jquery-ui") { this.desc = "Your new description"; } }); 

用下划线/ lodash库很容易实现:

  _.chain(projects) .find({value:"jquery-ui"}) .merge({desc: "new desc"}); 

文档:
https://lodash.com/docs#find
https://lodash.com/docs#merge

你需要知道你正在改变的对象的索引。 那么它很简单

 projects[1].desc= "new string"; 
 // using higher-order functions to avoiding mutation var projects = [ { value: "jquery", label: "jQuery", desc: "the write less, do more, JavaScript library", icon: "jquery_32x32.png" }, { value: "jquery-ui", label: "jQuery UI", desc: "the official user interface library for jQuery", icon: "jqueryui_32x32.png" }, { value: "sizzlejs", label: "Sizzle JS", desc: "a pure-JavaScript CSS selector engine", icon: "sizzlejs_32x32.png" } ]; // using higher-order functions to avoiding mutation index = projects.findIndex(x => x.value === 'jquery-ui'); [... projects.slice(0,index), {'x': 'xxxx'}, ...projects.slice(index + 1, projects.length)]; 

你可以在你的例子中使用.find

  var projects = [ { value: "jquery", label: "jQuery", desc: "the write less, do more, JavaScript library", icon: "jquery_32x32.png" }, { value: "jquery-ui", label: "jQuery UI", desc: "the official user interface library for jQuery", icon: "jqueryui_32x32.png" }, { value: "sizzlejs", label: "Sizzle JS", desc: "a pure-JavaScript CSS selector engine", icon: "sizzlejs_32x32.png" } ]; let project = projects.find((p) => { return p.value === 'jquery-ui'; }); project.desc = 'your value' 

我们也可以使用Array的map函数来修改使用Javascript的数组对象。

 function changeDesc(value, desc){ projects.map((project) => project.value == value ? project.desc = desc : null) } changeDesc('jquery', 'new description') 

更新与匹配使用的多个项目:

 _.chain(projects).map(item => { item.desc = item.value === "jquery-ui" ? "new desc" : item.desc; return item; }) 

试试这个代码。 它使用jQuery的grep函数

 array = $.grep(array, function (a) { if (a.Id == id) { a.Value= newValue; } return a; }); 

这是我对这个问题的回应。 我的下划线版本是1.7,因此我无法使用.findIndex。 所以我手动得到项目的索引,并取而代之。 这里是相同的代码。

  var students = [ {id:1,fName:"Ajay", lName:"Singh", age:20, sex:"M" }, {id:2,fName:"Raj", lName:"Sharma", age:21, sex:"M" }, {id:3,fName:"Amar", lName:"Verma", age:22, sex:"M" } {id:4,fName:"Shiv", lName:"Singh", age:22, sex:"M" } ] 

下面的方法将replace对象中具有更多属性的id:4的学生

 function updateStudent(id) { var indexOfRequiredStudent = -1; _.each(students,function(student,index) { if(student.id === id) { indexOfRequiredStudent = index; return; }}); students[indexOfRequiredStudent] = _.extend(students[indexOfRequiredStudent], {class:"First Year",branch:"CSE"}); 

}

下划线1.8将被简化,因为我们有方法_.findIndexOf。