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);
});
업데이트 : 교체하려는 객체에는 다음과 같은 많은 속성이 있습니다.
{id : 1, Prop1 : ..., Prop2 : ... 등}
해결책:
dfsq 덕분에 lodash 내에서 제대로 작동하는 것처럼 보이고 꽤 깔끔한 적절한 솔루션을 찾았 으며이 요구 사항을 여러 곳에서 보냈으므로 믹스 인에 넣었습니다. 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);
}
};
_.findIndex
일치를 위해 사용하십시오 .
_.findIndex
대신에 _.find
를 사용 하면 두 번째 _.find
와를 모두 삭제할 수 있습니다 _.indexOf
. 필요한 것은 1 일 때 배열을 3 번 반복하는 것입니다.