JQuery / JS: сортировка массива на основе другого массива? - PullRequest
1 голос
/ 13 декабря 2010

Я хочу отсортировать объект / массив JSON (показанный ниже как myArray) по значениям из другого массива - очень близко к запросу MYSQL MYSQL WHERE IN(1,2,3).Мне удалось получить отличный ответ Ника Крэйвера о том, как отсортировать по одному свойству и значению, но как я могу сделать это с несколькими значениями из моего другого массива?

Вот мой массив данных Json набора данных:

var myArray = [
{
    "id":"2",
    "name":"My name",
    "properties":{"prop1":"value1"}
}];

И массив, по которому я хочу отсортировать (сериализовать, прямо из формы):

var sortArray = [ { "prop1":"value1","prop2":"value2" }];

Текущая функция сортировки, как она выглядит сейчас (любезно Ник Крейвер):

function filterDataset(property, value){
    var newArray = [];

    for (var i = 0, l = myArray.length; i < l; i++) {
        if (myArray[i].properties[property] === value) 
        newArray.push(myArray[i]);
    }            
    return newArray;
}

Ответы [ 2 ]

1 голос
/ 13 декабря 2010

Вот как мне удалось это исправить:

function filterDataset2(properties){
    var newArray = [];

    for (var i = 0, l = dataset.length; i < l; i++) {

        $.each(properties, function(){
            if (dataset[i].properties[this.name] === this.value) 
                newArray.push(myArray[i]);            
        });

    }

    return newArray;
}
0 голосов
/ 13 декабря 2010

Возможно, это не то, что вы имеете в виду, но если у вас есть известный список свойств, не могли бы вы просто ||ваше сравнение?Допустим, у вас есть 2 свойства ...

  function filterDataset(property, value){
    var newArray = [];

    for (var i = 0, l = myArray.length; i < l; i++) {
        if ((dataset[i].egenskaper[property1] === value) || (dataset[i].egenskaper[property2] === value) ) 
        newArray.push(myArray[i]);
    }            
    return newArray;
}

В противном случае, если длина массива сортировки неизвестна, вы можете использовать метод типа array.find, который вернет true, если свойство найдено в рассматриваемом массиве,Если он возвращает true, просто поместите это значение в только что отсортированный массив.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...