js把两个数组对象合并成一个一一对应的数组对象

新手上路,请多包涵

原数组 :var originArray = [{key: 'wifi', value:[false,true,false]},{key:'os',value:[true,false,true]}];

转化成

目标数组 :var resultArray = [{wifi:false,os:true},{wifi:true,os:false},{wifi:false,os:true}];

有没有简洁的实现方法

阅读 4.2k
3 个回答
var originArray = [{key: 'wifi', value:[false,true,false]},{key:'os',value:[true,false,true]}];
// 一行够简洁吗hhh
var resultArray = originArray.reduce((res,item) => (item.value.forEach((v,i) => (res[i] ||= {})[item.key] = v), res), []);
// 转为可读性好点的形式
var resultArray = originArray.reduce((res,item) => {
  item.value.forEach((v,i) => {
    var ele = res[i] ||= {};
    ele[item.key] = v;
  });
  return res;
}, []);
let resultArray = originArray.reduce((arr, item) => {
    item.value.forEach((citem, index) => {
        (arr[index] = arr[index] || {})[item.key] = citem
    })    
    return arr
}, [])
function compose(source) {
    const length = source[0].value.length;
    return Array.from(Array(length))
        .map((_, i) => source
            .reduce(
                (o, { key, value }) => ({ ...o, [key]: value[i] }),
                {}
            )
        );
}
const originArray = [
    { key: "wifi", value: [false, true, false] },
    { key: "os", value: [true, false, true] }
];

const resultArray = compose(originArray);

console.log(JSON.stringify(resultArray, null, 2));
推荐问题