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+, но это то, что нужно изучить и улучшить!:)

Есть еще одно возможное решение, если вы хотите попробовать.

Ура!

Другие вопросы по тегам