2016-04-25 24 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? 

如果你的標籤名稱是預先知道的和有限的

然後只需

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

或者你可以創建我將是任何幫助

回答

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

感激保留標記名稱的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