使用javascript比较和排序数组

时间:2018-03-07 20:46:43

标签: javascript lodash

以下

array1 = [{
        "x": 0,
        "y": 1,
        "z": 1,
        "i": "chart1"
         }, {
        "x": 0,
        "y": 2,
        "z": 1,
        "i": "chart2"
         }, {
        "x": 1,
        "y": 1,
        "z": 1,
        "i": "chart3 "
    }
]

array2 = [{
        "x": 1,
        "y": 1,
        "z": 1,
        "i": "chart1"
        }, {
        "x": 0,
        "y": 1,
        "z": 1,
        "i": "chart2"
        }, {
        "x": 0,
        "y": 2,
        "z": 1,
        "i": "chart3"
    }
]

比较xy的{​​{1}}和array1,如果相等则找到位置,并返回i值数组的集合。

即在上述情况下它应该返回:

array2

我有一个json如下:

array3=["chart2","chart3","chart1"]

这需要基于json = [{ "visType:" bar "," visName ":" chart1 "},{" visType: "bar", "visName": "chart2" }, { "visType:" Pie "," visName ":" chart3 "}] 排序,输出应该与更新的json

一样
array3 = ["chart2","chart3","chart1"]

我需要使用updatedjson = [{ "visType:" bar "," visName ":" chart2 "},{" visType: "Pie", "visName": "chart3" }, { "visType:" bar "," visName ":" chart1 "}] lodash的解决方案。

1 个答案:

答案 0 :(得分:1)

const array3 = [...array1, ...array2].filter(({x,y}) => x===y);
const updatedjson = array3.map(({i}) => json.find(({visName}) => i === visName));

编辑:修复了充满语法错误的输入数据:

var array1 = [{ "x": 0, "y": 1, "z": 1, "i": "chart1" }, { "x": 0, "y": 2, "z": 1, "i": "chart2" }, { "x": 1, "y": 1, "z": 1, "i": "chart3" }];
var array2 = [{ "x": 1, "y": 1, "z": 1, "i": "chart1" }, { "x": 0, "y": 1, "z": 1, "i": "chart2" }, { "x": 0, "y": 2, "z": 1, "i": "chart3" }];

var json = [
    { "visType": "bar", "visName": "chart1" },
    { "visType": "bar", "visName": "chart2" },
    { "visType": "Pie", "visName": "chart3" }
];

const array3 = [...array1, ...array2].filter(({ x, y }) => x === y);
const updatedjson = array3.map(({ i }) => json.find(({ visName }) => i === visName));
console.log(array3);
console.log(updatedjson);