Javascript 在新数组中返回数组中每个唯一的值实例
我正在尝试编写一个函数,它将接受以下数组Javascript 在新数组中返回数组中每个唯一的值实例,javascript,underscore.js,Javascript,Underscore.js,我正在尝试编写一个函数,它将接受以下数组 var data = [ { name: 'Josh', description: 'some data about this guy', sortOrder: 'Gold' }, { name: 'Bill', descr
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
[白金、黄金、白银]这应该很有效(干净js):
var订单=[];
对于(变量i=0;i
这应该很有效(干净的js):
var订单=[];
对于(变量i=0;i
试试这个
var result=\u0.chain(数据)
.pluck(‘sortOrder’)
.uniq()
.value();
控制台日志(结果)代码>试试这个
var result=\u0.chain(数据)
.pluck(‘sortOrder’)
.uniq()
.value();
控制台日志(结果)带下划线的代码>:
console.log(_.chain(data).pluck('sortOrder').uniq().value());
加下划线:
console.log(_.chain(data).pluck('sortOrder').uniq().value());
由于这些值是字符串,我们可以通过JavaScript中的对象进行访问
var a=(函数(arr){
变量i,o={};
对于(i=0;i
由于值是字符串,我们可以通过JavaScript中的对象进行访问
var a=(函数(arr){
变量i,o={};
对于(i=0;i
不使用任何其他库:
var results = [];
for(var i = 0; i < data.length; ++i){
if(results.indexOf(data[i].sortOrder) < 0){
results.push(data[i].sortOrder);
}
}
var结果=[];
对于(变量i=0;i
results
变量将包含您想要的列表。不使用任何其他库:
var results = [];
for(var i = 0; i < data.length; ++i){
if(results.indexOf(data[i].sortOrder) < 0){
results.push(data[i].sortOrder);
}
}
var结果=[];
对于(变量i=0;i
results
变量将包含您想要的列表。许多简单的JS产品,它们总是可以与库进行比较。考虑ES5的减少:
var result = data.reduce(function(acc, val) {
if (acc.indexOf(val.sortOrder) == -1) acc.push(val.sortOrder);
return acc;
},[]);
许多简单的JS产品,与库相比总是很好的。考虑ES5的减少:
var result = data.reduce(function(acc, val) {
if (acc.indexOf(val.sortOrder) == -1) acc.push(val.sortOrder);
return acc;
},[]);
? -> <代码>..uniq(..pull(数据,'sortOrder'))
?->\uu.uniq(u.pull(data,'sortOrder'))
您不需要对使用特殊情况。length==0
,indexOf将给出-1
仍然为真。不知道我写第一部分的时候在想什么。编辑以删除该值。对于,不需要特殊的大小写。长度===0
,indexOf将给出-1
仍然为true。不知道我写第一部分的时候在想什么。编辑以删除该值。是什么阻止了相同值的多次添加?重复if('foo'&&&!orders['foo']){orders.push('foo');}
不断添加到orders
@PaulS。不应该。你能给我举个例子吗?@YavorIvanov-orders[data[i].sortOrder]
正在检查名为Gold、Platinum等属性的订单。但它们是数组中的值,而不是属性名称。这只是创建一个包含所有排序器值(包括重复项)的数组。也许您错过了“返回一个数组,其中包含每个唯一排序器的一个实例”。@PaulS。天哪,我有点惭愧。你说得对,谢谢:D我真的很困是什么阻止了相同值的多次相加?重复if('foo'&&&!orders['foo']){orders.push('foo');}
不断添加到orders
@PaulS。不应该。你能给我举个例子吗?@YavorIvanov-orders[data[i].sortOrder]
正在检查名为Gold、Platinum等属性的订单。但它们是数组中的值,而不是属性名称。这只是创建一个包含所有排序器值(包括重复项)的数组。也许您错过了“返回一个数组,其中包含每个唯一排序器的一个实例”。@PaulS。天哪,我有点惭愧。你说得对,谢谢。我真的很困