有问题(不是太复杂,但我似乎无法想出一个明确的解决方法)。
我有一系列项目,其中有一个重复的ID,所以为了说明的目的,请考虑:
[
{name: "john", task: "dig"},
{name: "john", task: "swim"},
{name: "john", task: "eat"},
{name: "paul", task: "dig"},
]
由此我想创建一个表格,其中列将是名称 - 所以John和Paul,然后在那里将有任务。
我想我需要2个for循环,但不确定第一个是如何获得'唯一'名称。
我可以使用jQuery中可以解决的问题。
答案 0 :(得分:4)
var arr =
[
{name: 'john', task: 'dig'},
{name: 'john', task: 'swim'},
{name: 'john', task: 'eat'},
{name: 'paul', task: 'dig'},
];
var result = arr.reduce(function(table, element)
{
if(!table[element.name])
{
table[element.name] = [];
}
table[element.name].push(element.task);
return table;
}, {});
// For demo:
document.write(JSON.stringify(result));

答案 1 :(得分:1)
你可以在下划线库_.unique函数的帮助下完成。
首先,我们需要使用JavaScript map函数将arrary从对象数组转换为字符串数组。
之后,我们使用_.unique来获取唯一的字符串。
x=[
{name: 'john', task: 'dig'},
{name: 'dani', task: 'didg'},
{name: 'john', task: 'diadg'},
{name: 'john', task: 'diasdg'},
];
x=x.map(function (i) {return i.name}) // ['john','dani','john','john']
x=_.unique(x) // ['john','dani']
http://underscorejs.org/#uniq(_. uniq和_.unique相同)
答案 2 :(得分:0)
尝试使用$.each()
var data = [{
name: "john",
task: "dig"
}, {
name: "john",
task: "swim"
}, {
name: "john",
task: "eat"
}, {
name: "paul",
task: "dig"
}];
$.each(data, function(key, value) {
var fn = function(el) {
return el.find("tbody").append($("<tr />", {
"html": "<td>" + value.task + "</td>"
}))
}
if (!$("table[name=" + value.name + "]").is("*")) {
var elem = $("<table />", {
"name": value.name,
"html": "<tbody><th>" + value.name + "</th></tbody>"
}).appendTo("body");
fn(elem)
} else {
fn($("table[name=" + value.name + "]"))
}
})
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js">
</script>
&#13;