在新数组中返回数组中每个唯一值的实例

时间:2015-10-09 13:08:14

标签: javascript underscore.js

我正在尝试编写一个可以接受以下数组的函数,

var data = [
            {
                name: 'Josh',
                description: 'some data about this guy',
                sortOrder: 'Gold'
            }, 
            {
                name: 'Bill',
                description: 'some data about this guy',
                sortOrder: 'Platinum'
            },
            {
                name: 'Gary',
                description: 'some data about this guy',
                sortOrder: 'Platinum'
            },
            {
                name: 'Phillip',
                description: 'some data about this guy',
                sortOrder: 'Platinum'
            },
            {
                name: 'Bob',
                description: 'some data about this guy',
                sortOrder: 'Gold'
            },
            {
                name: 'Barry',
                description: 'some data about this guy',
                sortOrder: 'Gold'
            },
            {
                name: 'Joe',
                description: 'some data about this guy',
                sortOrder: 'Gold'
            },
            {
                name: 'Ed',
                description: 'some data about this guy',
                sortOrder: 'Silver'
            },
            {
                name: 'Baxter',
                description: 'some data about this guy',
                sortOrder: 'Platinum'
            },
            {
                name: 'Patrick',
                description: 'some data about this guy',
                sortOrder: 'Silver'
            },
            {
                name: 'Stepehn',
                description: 'some data about this guy',
                sortOrder: 'Silver'
            }
];

并给我一个看起来像这样的数组:

[Platinum, Gold, Silver] <-- The order doesn't matter

因此,它会检查数组中的所有sortOrder值,并返回一个包含每个唯一sortOrder的一个实例的数组。

到目前为止我写的任何内容都不断给我每个sortOrder的多个实例....有人能帮我一把吗?

如果可以提供任何帮助,我可以访问underscore.js库。

6 个答案:

答案 0 :(得分:3)

这应该很棒(干净的js):

var orders = [];

for (var i = 0; i < data.length; i++){

    if (data[i].sortOrder && orders.indexOf(data[i].sortOrder) == -1){
        orders.push(data[i].sortOrder);
    }

}

答案 1 :(得分:2)

试试这个

var result = _.chain(data)
  .pluck('sortOrder')
  .uniq()
  .value();

console.log(result);

Example

答案 2 :(得分:2)

使用下划线:

console.log(_.chain(data).pluck('sortOrder').uniq().value());

答案 3 :(得分:1)

由于值是 String ,我们可以通过 vanilla JavaScript中的 Object

var a = (function (arr) {
    var i, o = {};

    for (i = 0; i < arr.length; ++i)
        o[arr[i].sortOrder] = true;

    return Object.keys(o);
}(data));

答案 4 :(得分:1)

不使用任何其他库:

var results = [];
for(var i = 0; i < data.length; ++i){
    if(results.indexOf(data[i].sortOrder) < 0){
      results.push(data[i].sortOrder);
    }
}

results变量将包含您想要的列表。

答案 5 :(得分:0)

很多简单的JS产品,总是很好地与库进行比较。考虑使用ES5的reduce:

var result = data.reduce(function(acc, val) {
  if (acc.indexOf(val.sortOrder) == -1) acc.push(val.sortOrder);
  return acc;
},[]);