我正在尝试编写一个可以接受以下数组的函数,
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库。
答案 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)
答案 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;
},[]);