web-dev-qa-db-ja.com

Lodash:コレクション内のすべての値に新しいフィールドを追加する方法

例:

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}]  
var newArr = _.enhance(arr, { married : false });

console.log(newArr); // [{name: 'a', age: 23, married : false}, {name: 'b', age: 24, married : false}]

これを行うための何かを探しています。 enhanceはlodashには存在しないことに注意してください。 lodashでこれを行うことは可能ですか?
そうでない場合-追加可能ですか?

おかげで、

34
sowdri

おそらくあなたのオブジェクトをextendeachしたいでしょう。

muは短すぎて、私の言葉遊びを殺してしまいましたが、素晴らしい点を示しています。まったく新しいアレイを作成するために更新されました。

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];

var newArr = _.map(arr, function(element) { 
     return _.extend({}, element, {married: false});
});

ライブラリに追加する場合は、

_.enhance = function(list, source) {
    return _.map(list, function(element) { return _.extend({}, element, source); });   
}
52
Mathletics

ES6構文を使用します。これはあなたに役立つと思います。

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];    
arr.map((element) => {
   return element.married = false;
});
console.log(arr); // [{name: 'a', age: 23, married : false}, {name: 'b', age: 24, married : false}] 
13

lodash およびES6矢印表記を使用すると、ソリューションは非常に短くなります。

const newArr = _.map(arr, o => _.extend({married: false}, o));

注:このオブジェクトを変更すると元の配列がそのまま残るため、最初の引数としてオブジェクト{married: false}を使用します。ただし、これはmarriedが結果のオブジェクトの最初のフィールドになることを意味しますが、これはおそらく関係ありません。

9
Maurits Rijk

ES6で Map および Spread

const arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];
const newArr = arr.map(el => ({ ...el, ...{married: false} }));

console.log(newArr);  
// [{age: 23, married: false, name: 'a'}, {age: 24, married: false, name: 'b'}]


注:オブジェクトリテラルを取得する矢印関数は、オブジェクトを括弧で囲む必要があります(例:() => ({})

3
mfink

関数lodashには、マージに最も近い関数があります。 http://lodash.com/docs#merge

Mergeの仕組みとやりたいことのわずかな違いは、arrと同じ長さの配列が必要なことです。

var arr = [{name: 'a', age: 23}, {name: 'b', age: 24}];
var marriedArr = [{married : false}, {married : false}];
var newArr = _.merge(arr, marriedArr);
console.log(newArr);

あなたがしようとする場合:

var newArr = _.merge(arr, {married : false});

マージはconcatのように機能します。

1
dbriggs