使用jQuery和Javascript在Array中的唯一项

时间:2015-09-06 18:41:15

标签: javascript jquery arrays

有问题(不是太复杂,但我似乎无法想出一个明确的解决方法)。

我有一系列项目,其中有一个重复的ID,所以为了说明的目的,请考虑:

[
    {name: "john", task: "dig"},
    {name: "john", task: "swim"},
    {name: "john", task: "eat"},
    {name: "paul", task: "dig"},
]

由此我想创建一个表格,其中列将是名称 - 所以John和Paul,然后在那里将有任务。

我想我需要2个for循环,但不确定第一个是如何获得'唯一'名称。

我可以使用jQuery中可以解决的问题。

3 个答案:

答案 0 :(得分:4)

Array.prototype.reduce()



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;
&#13;
&#13;