Javascript 如何根据属性和另一个给定所需顺序的数组对对象数组进行排序?

Javascript 如何根据属性和另一个给定所需顺序的数组对对象数组进行排序?,javascript,jquery,json,sorting,Javascript,Jquery,Json,Sorting,我有以下数组: var my_list = ["XXXS", "XXS", "XS", "S", "M", "L", "XL", "XXL", "XXXL"]; 然后,我从json获得了以下对象数组: my_json = [ { size: "L", color: "black" }, { size: "M", color: "blue" }, { size: "XXL",

我有以下数组:

var my_list = ["XXXS", "XXS", "XS", "S", "M", "L", "XL", "XXL", "XXXL"];
然后,我从json获得了以下对象数组:

my_json = [
    {
        size: "L",
        color: "black"
    }, {
        size: "M",
        color: "blue"
    }, {
        size: "XXL",
        color: "red"
    }, {
        size: "XXS",
        color: "red"
    }
];
我正试图按照
我的列表的顺序,按
大小对对象数组进行排序
我已经找到了排序函数,但它是按字母顺序排序的,我不知道是否有一种简单的方法可以做到这一点

下面是一个JSFIDLE,您可以在其中尝试:

要明确的是:

实际产出

[{"size":"L","color":"black"},{"size":"M","color":"blue"},{"size":"XXL","color":"red"},{"size":"XXS","color":"red"}]
[{"size":"XXS","color":"red"},{"size":"M","color":"blue"}{"size":"L","color":"black"},{"size":"XXL","color":"red"}]
所需输出

[{"size":"L","color":"black"},{"size":"M","color":"blue"},{"size":"XXL","color":"red"},{"size":"XXS","color":"red"}]
[{"size":"XXS","color":"red"},{"size":"M","color":"blue"}{"size":"L","color":"black"},{"size":"XXL","color":"red"}]

您可以尝试一下:

var有序_列表=[];
对于(i=0;i
您可以尝试以下方法:

//only modern browsers support indexOf method for an array
my_list.indexOf = function(e){
  for(var i = 0; i < this.length; i++){
    if(this[i] === e) return i;
  }
  return -1;
};
//the sorter to compare 2 object based on the property size.
function sorter(a,b){
  var s1 = my_list.indexOf(a.size);
  var s2 = my_list.indexOf(b.size)
  return s1 > s2 ? 1 : s1 < s2 ? -1 : 0;
}
my_json.sort(sorter);
//只有现代浏览器支持数组的indexOf方法
my_list.indexOf=函数(e){
for(var i=0;is2?1:s1
试试这个

 var newMyJson = [];
for (var i = 0; i < my_list.length; i++) {

    var value = my_list[i];
    $.each(my_json, function (i, val) {

        if (value == val.size) {
            newMyJson.push(my_json[i]);
            return;
        }

    });
}
var newMyJson=[];
对于(var i=0;i
这里有一个jsfiddle,您可以在这里尝试:
太好了。。!但是你尝试了什么?“然后我得到了以下json:“那不是json,那只是一个数组(在本例中是对象数组)。提示:如果您使用的是JavaScript代码,那么它不是JSON。不要使用
for in
来循环数组。如果JavaScript实现已经提供了
Array.prototype.indexOf
,请不要覆盖它!!(在所有现代浏览器中都是如此。)我认为自定义排序器函数应该返回两个索引存在时的差异。看见还有一个问题是,如果索引未定义,该怎么办,因为属性有一个意外的值,以及这是否需要一些if块来测试并使用列表末尾的字母顺序或类似的内容。@Paul是的,忽略了这一点。