簡體   English   中英

如何根據鍵值更新javascript數組中的行?

[英]How can I update a row in a javascript array based on a key value?

我有一個這樣的數據數組:

var nameInfo  = [{name: "Moroni", age: 50},
                 {name: "Tiancum", age: 43},
                 {name: "Jacob", age: 27},
                 {name: "Nephi", age: 29},
                 {name: "Enos", age: 34}];

如果我有這樣的對象:

var nameInfo  = {name: "Moroni", age: 51};

有沒有一種簡單的方法可以更新變量nameInfo。 這些之間的關鍵是名稱列。 我知道有一種方法可以通過搜索行,刪除和添加來實現這一點,但我想有辦法在更新行的地方執行此操作。 請注意,如果它有幫助我確實加載了underscore.js.

最簡單的方法是循環查找具有匹配名稱的那個然后更新年齡:

var newNameInfo  = {name: "Moroni", age: 51};
var name = newNameInfo.name;

for (var i = 0, l = nameInfo.length; i < l; i++) {
    if (nameInfo[i].name === name) {
        nameInfo[i].age = newNameInfo.age;
        break;
    }
}

JSFiddle示例

使用下划線,您可以使用_.find方法執行以下操作而不是for循環:

var match = _.find(nameInfo, function(item) { return item.name === name })
if (match) {
    match.age = newNameInfo.age;
}

JSFiddle示例

編輯:您可以使用ES6 過濾器結合箭頭功能

nameInfo.filter(x => {return x.name === nametofind })[0].age = newage

您可以使用_.where函數

var match = _.where(nameInfo , {name  :nametofind });

然后更新比賽

match[0].age = newage
var nameInfo  = [{name: "Moroni", age: 50},{name: "Tiancum", age: 43},
                 {name: "Jacob", age: 27},{name: "Nephi", age: 29},
                 {name: "Enos", age: 34}
                ];
_.map(nameInfo, function(obj){
  if(obj.name=='Moroni') {
    obj.age=51; // Or replace the whole obj
  }
});

這應該做到這一點。 它整潔可靠,帶有下划線

使用Underscore,您可以使用_.findWhere http://underscorejs.org/#findWhere

_.findWhere(publicServicePulitzers, {newsroom: "The New York Times"});
=> {year: 1918, newsroom: "The New York Times",
  reason: "For its public service in publishing in full so many official reports,
  documents and speeches by European statesmen relating to the progress and
  conduct of the war."}

您可以使用findWhere和extend

obj = _.findWhere(@songs, {id: id})
_.extend(obj, {name:'foo', age:12});

您可以使用_.find方法,如下所示:

var nameInfos  = [{name: "Moroni", age: 50},
                 {name: "Tiancum", age: 43},
                 {name: "Jacob", age: 27},
                 {name: "Nephi", age: 29},
                 {name: "Enos", age: 34}];
var nameToSearch = "Moroni";
var myRecord = _.find(nameInfos, function(record){ return record.name === nameToSearch; });

工作示例: http//jsfiddle.net/9C2u3/

var match = _.findWhere(nameInfo , {name  :nametofind });
match.age = newage

使用lodash的find()函數的明星前鋒,

var nameInfo  = [{name: "Moroni", age: 50},
             {name: "Tiancum", age: 43},
             {name: "Jacob", age: 27},
             {name: "Nephi", age: 29},
             {name: "Enos", age: 34}];

var objToUpdate = _.find(nameInfo, {name: "Moroni"});

if(objToUpdate) objToUpdate.age = 51;

console.log(nameInfo); // Moroni age will be 51;

注意:如果有多個Moroni對象,_. find只能獲取第一個匹配項。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM