JSLINQ - отличается от нескольких столбцов
У меня есть работающая демоверсия 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);
};
1 ответ
Как дела?:)
Может быть, что-то вроде этого поможет вам:
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();
Это вернет массив объекта, возвращенного внутри отчетливого.
Редактировать:
Измените отдельный метод на это:
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+, но это то, что нужно изучить и улучшить!:)
Есть еще одно возможное решение, если вы хотите попробовать.
Ура!