首页 > 解决方案 > javascript按字符串数组对对象数组进行排序

问题描述

有没有索引的数据结构:

const data = [{
        "B": {
            "value": 1,
        },
        "D": {
            "value": "45"
        },
        "E": {
            "value": "234"
        },
        "A": {
            "value": "543"
        },
        "C": {
            "value": "250"
        }
    }, {
        "B": {
            "value": 6,
        },
        "D": {
            "value": "234"
        },
        "E": {
            "value": "67"
        },
        "A": {
            "value": "78"
        },
        "C": {
            "value": "12"
        }
    }
   ]

和字符串数组,上面的数据数组应按其排序:

const strings = ["E", "C", "B", "A", "D"];

是否有解决方案按字符串对数据数组进行排序以获得最终结果,例如:

   [{
        "E": {
            "value": "234",
        },
        "C": {
            "value": "45"
        },
        "B": {
            "value": 1
        },
        "A": {
            "value": "543"
        },
        "D": {
            "value": "250"
        }
    }...

标签: javascriptarrayssortingjavascript-objects

解决方案


是的,它实际上很容易。

const data = [{
        "B": {
            "value": 1,
        },
        "D": {
            "value": "45"
        },
        "E": {
            "value": "234"
        },
        "A": {
            "value": "543"
        },
        "C": {
            "value": "250"
        }
    }, {
        "B": {
            "value": 6,
        },
        "D": {
            "value": "234"
        },
        "E": {
            "value": "67"
        },
        "A": {
            "value": "78"
        },
        "C": {
            "value": "12"
        }
    }
   ]

const strings = ["E", "C", "B", "A", "D"];

const sorted = data.map(obj => {
  const res = {};
  strings.forEach(key => res[key] = obj[key]);
  return res;
});

console.log(sorted);

但是 javascript 不保证对象内部变量的顺序,所以你不应该依赖它。要对其进行排序,您必须使用 ie 数组,它不会是完全相同的数据结构,但它是相似的,它将确保排序。

const data = [{
        "B": {
            "value": 1,
        },
        "D": {
            "value": "45"
        },
        "E": {
            "value": "234"
        },
        "A": {
            "value": "543"
        },
        "C": {
            "value": "250"
        }
    }, {
        "B": {
            "value": 6,
        },
        "D": {
            "value": "234"
        },
        "E": {
            "value": "67"
        },
        "A": {
            "value": "78"
        },
        "C": {
            "value": "12"
        }
    }
   ]

const strings = ["E", "C", "B", "A", "D"];

const sorted = data.map(obj => {
  const res = [];
  strings.forEach(key => {
    const newObj = {};
    newObj[key] = obj[key];
    res.push(newObj)
  });
  return res;
});

console.log(sorted);


推荐阅读