2016-04-25 14 views
4

JavaScriptで単一値に基づいて配列を動的に分割する必要があります。JavaScriptの単一値に基づいて配列を動的に分割する方法Node.js

var dataStuff = [ 
    { Name: 'Apple', Tag: 'Fruit', Price: '2,5'}, 
    { Name: 'Bike', Tag: 'Sport', Price: '150'}, 
    { Name: 'Kiwi', Tag: 'Fruit', Price: '1,5'}, 
    { Name: 'Knife', Tag: 'Kitchen', Price: '8'}, 
    { Name: 'Fork', Tag: 'Kitchen', Price: '7'} 
]; 

を、私はタグ、 などによって分割配列を期待する:

私は配列を持っています。

var Fruit = [ 
    { Name: 'Apple', Tag: 'Fruit', Price: '2,5'}, 
    { Name: 'Kiwi', Tag: 'Fruit', Price: '1,5'} 
]; 

var Sport = [ 
    { Name: 'Bike', Tag: 'Sport', Price: '150'} 
]; 

var Kitchen = [ 
    { Name: 'Knife', Tag: 'Kitchen', Price: '8'}, 
    { Name: 'Fork', Tag: 'Kitchen', Price: '7'} 
]; 

における場合dataStuffアレイは、結果に複数のアレイであろうよりタグあろう。 とにかく私はこれをどうすればいいのか分かりません。私はnode.js + Jade(ビュー用)を使用しています。私はそれぞれの配列をテーブルに入れなければならないので、この考え方をするのが最善の考えであると思います。たぶん、このような何か:

// Basic table 
tbody 
    - each item in dataStuff 
     tr 
      td= item.Name 
      td= item.Tag 
      td= item.Price 

// Other tables 
- each item in dataStuff 
    item.Tag.push(item); 
    // adding items to array based on Tag 
    // probably it won't work 
    // but still how should i draw table? 

は、私はあなたのタグ名が事前に知られている場合は任意のヘルプ

答えて

3

グループ化されたアイテムを持つオブジェクトを使用できます。これは任意のタグに対して機能し、必要に応じてObject.keys(grouped)のすべてのタグのリストを許可します。

var dataStuff = [{ Name: 'Apple', Tag: 'Fruit', Price: '2,5' }, { Name: 'Bike', Tag: 'Sport', Price: '150' }, { Name: 'Kiwi', Tag: 'Fruit', Price: '1,5' }, { Name: 'Knife', Tag: 'Kitchen', Price: '8' }, { Name: 'Fork', Tag: 'Kitchen', Price: '7' }], 
 
    grouped = Object.create(null); 
 

 
dataStuff.forEach(function (a) { 
 
    grouped[a.Tag] = grouped[a.Tag] || []; 
 
    grouped[a.Tag].push(a); 
 
}); 
 

 
document.write(Object.keys(grouped)); 
 
document.write('<pre>' + JSON.stringify(grouped, 0, 4) + '</pre>');

+0

完全に空のオブジェクトはどのように役立ちますか? 'Object.create(null) ' –

+0

タグ' toString'を持つことができます。これはうまくいかないでしょう。 –

+0

私のdataStuffがデータベースからのものならどうなりますか?どうすれば 'grouped = Object.create(null);'を使うことができますか? 'var groupedstuff = dataStuff、grouped = Object.create(null);' - おそらく動作しませんか? – DiPix

0

に感謝することと限られた

、単に

var Fruit = dataStuff.filter(function(val){ 
    return val.Tag == "Fruit"; 
}); 
var Sport = dataStuff.filter(function(val){ 
    return val.Tag == "Sport"; 
}); 
var Kitchen = dataStuff.filter(function(val){ 
    return val.Tag == "Kitchen"; 
}); 

または作成することができますタグ名を保持するJSONオブジェクト

var tags = { 
    "Fruit" : [], 
    "Sport" : [], 
    "Kitchen" : [], 
}; 
for(var tag in tags) 
{ 
    tags[tag] = dataStuff.filter(function(val){ 
     return val.Tag == tag; 
    }); 
} 

tags.FruitはあなたにFruit配列を与えます。

+0

いいえ、彼らは知られていません。そのため、動的でなければなりません。 – DiPix

+0

@DiPix私はそれにもオプションを与えました。 – gurvinder372

関連する問題