JSLINQ - 区别于多列
JSLINQ - Distinct from multiple columns
我有一个有效的 JSFiddle 演示
https://jsfiddle.net/u1fohjxw/
我们的想法是基于多个字段创建一个唯一的项目列表。
我知道我实现它的方式可以改进,但需要关于在 JSLINQ 中实现它的建议。
然后我手动循环并再次添加这个过滤后的唯一列表 - 这可以在 JSLINQ 中完成。
请指出应该如何完成:
var myList = [
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Sutherland"},
{FirstName:"John",LastName:"Ronald"},
{FirstName:"Steve",LastName:"Pinkerton"}
];
var exampleArray = JSLINQ(myList)
.Distinct(function(item){ return item.FirstName.concat(";",item.LastName)}).items
var newList = [];
for (var x = 0 ; x < exampleArray.length ; x++) {
var arraylist = exampleArray[x].split(";");
var y= new Object();
y.FirstName = arraylist[0];
y.LastName = arraylist[1];
newList.push(y);
};
你好吗? :)
也许这样的事情可以帮助你:
var myList = [
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Sutherland"},
{FirstName:"John",LastName:"Ronald"},
{FirstName:"Steve",LastName:"Pinkerton"}
];
var resultList = myList.Distinct(function(x){
return {
FirstName: x.FirstName,
LastName: x.LastName
}
}).ToArray();
这将 return 一个对象数组 return 放入 distinct 中。
编辑:
将不同的方法更改为:
Distinct: function(clause) {
var item, dict = {}, retVal = [];
for (var i = 0; i < this.items.length; i++) {
item = clause.apply(this.items[i], [this.items[i]]);
if (dict[JSON.stringify(item)] === undefined) {
dict[JSON.stringify(item)] = true;
retVal.push(item);
}
}
dict = null;
return JSLINQ(retVal);
},
它没有经过压力测试,我不知道迭代 10k+ 对象需要多少时间,但这是值得研究和改进的东西! :)
如果您想尝试,还有另一种可能 fix。
干杯!
我有一个有效的 JSFiddle 演示 https://jsfiddle.net/u1fohjxw/
我们的想法是基于多个字段创建一个唯一的项目列表。 我知道我实现它的方式可以改进,但需要关于在 JSLINQ 中实现它的建议。
然后我手动循环并再次添加这个过滤后的唯一列表 - 这可以在 JSLINQ 中完成。
请指出应该如何完成:
var myList = [
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Sutherland"},
{FirstName:"John",LastName:"Ronald"},
{FirstName:"Steve",LastName:"Pinkerton"}
];
var exampleArray = JSLINQ(myList)
.Distinct(function(item){ return item.FirstName.concat(";",item.LastName)}).items
var newList = [];
for (var x = 0 ; x < exampleArray.length ; x++) {
var arraylist = exampleArray[x].split(";");
var y= new Object();
y.FirstName = arraylist[0];
y.LastName = arraylist[1];
newList.push(y);
};
你好吗? :)
也许这样的事情可以帮助你:
var myList = [
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Pearson"},
{FirstName:"Chris",LastName:"Sutherland"},
{FirstName:"John",LastName:"Ronald"},
{FirstName:"Steve",LastName:"Pinkerton"}
];
var resultList = myList.Distinct(function(x){
return {
FirstName: x.FirstName,
LastName: x.LastName
}
}).ToArray();
这将 return 一个对象数组 return 放入 distinct 中。
编辑:
将不同的方法更改为:
Distinct: function(clause) {
var item, dict = {}, retVal = [];
for (var i = 0; i < this.items.length; i++) {
item = clause.apply(this.items[i], [this.items[i]]);
if (dict[JSON.stringify(item)] === undefined) {
dict[JSON.stringify(item)] = true;
retVal.push(item);
}
}
dict = null;
return JSLINQ(retVal);
},
它没有经过压力测试,我不知道迭代 10k+ 对象需要多少时间,但这是值得研究和改进的东西! :)
如果您想尝试,还有另一种可能 fix。
干杯!