js/es6 子级数据赋往父级

原数据

const data = [
    {
        type: '1', rule: [
            { id: '1', label: '大神' },
            { id: '2', label: '你好' }
        ]
    }
]

期待效果

const result = [
    { type: '1', id: '1', label: '大神', rule: [{ id: '1', label: '大神' }] },
    { type: '1', id: '2', label: '你好', rule: [{ id: '2', label: '你好' }] }
]

也就是把rule里的东西提到上一层来,并保留rule数据,rule里面可能会只有一条数组也可能多条,请教大神们我该如何操作!

在这里先感谢各位大神们的解答,小弟感激不尽!

阅读 3k
4 个回答
Object.assign(data, ...data.rule)

两种遍历方法
image.png

var data = [{ type: '1', rule: [{ id: '1', label: '大神' }, { id: '2', label: '你好' }] }]
data.flatMap(({rule,...other})=>{
  return rule.map(item=>{
        return {rule:[item],...item,...other}
  });
})

image.png

var data = [{ type: '1', rule: [{ id: '1', label: '大神' }, { id: '2', label: '你好' }] }]
data.reduce((acc,{rule,...other})=>{
    rule.forEach(item=>{
        acc.push({rule:[item],...item,...other});
  });
return acc;
},[])
function transform(arr) {
    var ret = [];
    for (var i = 0; i < arr.length; ++i) {
        var item = arr[i], rule = item.rule;
        for (var j = 0; j < rule.length; ++j) {
            var key, obj = {};
            for (key in item) obj[key] = item[key];
            for (key in rule[j]) obj[key] = rule[j][key];
            obj.rule = [rule[j]];
            ret.push(obj);
        }
    }
    return ret;
}
var result = transform(data);
console.dir(result);

image.png

function flattenData(data) {
  // 创建一个空数组用于存放结果
  let result = [];
  // 遍历data数组中的每个元素
  data.forEach(item => {
    // 遍历item.rule属性中的每个对象
    item.rule.forEach(obj => {
      // 创建一个新对象,将item.type和obj.id, obj.label属性复制到其中
      let newObj = { type: item.type, id: obj.id, label: obj.label };
      // 将item.rule属性作为新对象的rule属性
      newObj.rule = [obj];
      // 将新对象推入结果数组中
      result.push(newObj);
    });
  });
  // 返回结果数组
  return result;
}
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏