javascript - lodash中是否有替换匹配项的功能

标签 javascript lodash

我想知道lodash中有没有更简单的方法来替换JavaScript集合中的项目? (可能 duplicate 但我不明白那里的答案:)

我查看了他们的文档,但找不到任何东西

我的代码是:

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);
});

更新: 我要替换的对象有很多属性,比如

{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);
    }
};

最佳答案

在您的情况下,您需要做的就是在数组中找到对象并使用 Array.prototype.splice() 方法,阅读更多详细信息 here :

var arr = [{id: 1, name: "Person 1"}, {id:2, name:"Person 2"}];

// Find item index using _.findIndex (thanks @AJ Richardson for comment)
var index = _.findIndex(arr, {id: 1});

// Replace item at index using native splice
arr.splice(index, 1, {id: 100, name: 'New object.'});

// "console.log" result
document.write(JSON.stringify( arr ));
<script src="//cdnjs.cloudflare.com/ajax/libs/lodash.js/2.4.1/lodash.min.js"></script>

关于javascript - lodash中是否有替换匹配项的功能,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27641731/

相关文章:

javascript - 给定一个数组,编写一个返回该数组所有可能的三元组/序列的函数? JavaScript

javascript - 在 Javascript 中动态创建音频元素

Javascript,通过id在对象列表中查找对象

javascript - 合并具有相同键值对的对象数组中的值

javascript - 使用 Lodash 从对象中删除字段

javascript - jquery 点击事件单选按钮

javascript - 使用 ng-repeat 提供多个按钮

javascript - 如何将 LoDash GroupBY 与不同的数组类型一起使用

javascript - 使用 lodash 在 javascript 中查找两组数据之间的匹配

javascript - 希望 javascript 倒计时即使在刷新后也能从原来的位置继续