jQuery / JS:基于另一个数组排序数组?

时间:2010-12-13 20:07:53

标签: javascript jquery arrays json object

我想根据另一个数组的值对JSON对象/数组(如下所示为myArray)进行排序 - 非常接近MYSQL查询MYSQL WHERE IN(1,2,3)。我能够得到一个关于如何按一个属性和值排序的great answer by Nick Craver,但是如何使用其他数组中的多个值来做这个呢?

这是我的数据集Json数组:

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

我要排序的数组(序列化,直接来自表单):

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

现在的排序功能(由Nick Craver提供):

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 个答案:

答案 0 :(得分:1)

以下是我设法修复它的方法:

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;
}

答案 1 :(得分:0)

这可能不是你的意思,但如果你有一个已知的属性列表,你可以只是||你的比较?假设你有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,只需在新排序的数组上推送该值。