Интересно, есть ли более простой метод в lodash для замены элемента в коллекции JavaScript? (Возможно дублировать, но я не понял ответа там:)
Я просмотрел их документацию, но ничего не нашел
Мой код:
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
// Can following code be reduced to something like _.XX(arr, {id:1}, {id:1, name: "New Name"});
_.each(arr, function(a, idx){
  if(a.id === 1){
    arr[idx] = {id:1, name: "Person New Name"};
    return false;
  }
});
_.each(arr, function(a){
  document.write(a.name);
});
Update: Объект, который я пытаюсь заменить, имеет много свойств, таких как
{id: 1, Prop1:..., Prop2:... и т.д.}
Решение:
Благодаря dfsq, но я нашел правильное решение в рамках lodash, которое, кажется, работает нормально и довольно аккуратно, и я добавил его в mixin, так как я Это требование во многих местах. JSBin
var update = function(arr, key, newval) {
  var match = _.find(arr, key);
  if(match)
    _.merge(match, newval);
  else
    arr.push(newval);    
};
_.mixin({ '$update': update });
var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];
_.$update(arr, {id:1}, {id:1, name: "New Val"});
document.write(JSON.stringify(arr));
Быстрое решение Как указано в @dfsq, следующий путь быстрее
var upsert = function (arr, key, newval) {
    var match = _.find(arr, key);
    if(match){
        var index = _.indexOf(arr, _.find(arr, key));
        arr.splice(index, 1, newval);
    } else {
        arr.push(newval);
    }
};
