我需要根据JavaScript中的单个值动态拆分数组。
我有一个阵列:
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'}
];
我希望通过Tag分割数组, 例如
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?
我将不胜感激任何帮助
答案 0 :(得分: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>');
答案 1 :(得分: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
数组。