2016-10-16 8 views
2

入力オブジェクトを「キー」する機能はどのように見えますか?私はその話題を研究していますが、良い答えは見つかりませんでした。だから、オブジェクトに動的キーを追加できますか?

、私は入力オブジェクトを持っている場合...

var fruits = [{fruit: "apple", taste: "sour"}, 
       {fruit: "cherry", taste: "sweet", color: "red"}]; 


functionname(fruits, function(i) { return i.fruit; }); 

RETURN: 

    { "apple": [{fruit: "apple", taste: "sour"}], 
    { "cherry": [{fruit: "cherry", taste: "sweet", color: "red"}] 

functionname(fruits, function(i) { return i.taste.length; }); 

RETURN: 

    { "4": [{fruit: "apple", taste: "sour"}], 
    { "5": [{fruit: "cherry", taste: "sweet", color: "red"}] 
+0

私の最初の思考ワットとArray#forEach

function getKeyedArray(array, callback) { var object = Object.create(null); array.reduce(function (a) { var key = callback(a); object[key] = object[key] || []; object[key].push(a); }); return object; } var fruits = [{ fruit: "apple", taste: "sour" }, { fruit: "cherry", taste: "sweet", color: "red" }]; console.log(getKeyedArray(fruits, function (i) { return i.fruit; })); console.log(getKeyedArray(fruits, function (i) { return i.taste.length; }));

バージョンとバージョンforEachとして、しかしforEachはArray.forEach(コールバック)なので、代わりに '[]] .forEach.call'です。 – Keith

答えて

0

あなたは、新しいオブジェクトを作成する関数を使用して、希望のキーで項目を返すことができます。

Array#reduce

function getKeyedArray(array, callback) { 
 
    return array.reduce(function (r, a) { 
 
     var key = callback(a); 
 
     r[key] = r[key] || []; 
 
     r[key].push(a); 
 
     return r; 
 
    }, Object.create(null)); 
 
} 
 

 
var fruits = [{ fruit: "apple", taste: "sour" }, { fruit: "cherry", taste: "sweet", color: "red" }]; 
 

 
console.log(getKeyedArray(fruits, function (i) { return i.fruit; })); 
 
console.log(getKeyedArray(fruits, function (i) { return i.taste.length; }));

+1

素晴らしいです。それは完全に動作します!本当にありがとう。 –

関連する問題