如果我使用传播语法,如何完全返回带有嵌套对象数组的数组?

时间:2019-06-26 05:27:04

标签: javascript ecmascript-6

我正在尝试映射我的数组并在满足条件的情况下添加一些额外的字段。我的代码添加了我需要的额外字段。但是问题是,我的数组没有完全返回,内部的嵌套对象数组返回null []。我发现传播语法会引起问题吗?我该怎么办?

这是我的示例数组:

data = [{
    "a": 1,
    "b": 5,
    "c": [{
      "a": 1,
      "b": 5
    }, {
      "a": 1,
      "b": 5
    }]
  },
  {
    "a": 2,
    "b": 6,
    "c": [{
      "a": 1,
      "b": 5
    }, {
      "a": 1,
      "b": 5
    }]
  },
  {
    "a": 3,
    "b": 7,
    "c": [{
      "a": 1,
      "b": 5
    }, {
      "a": 1,
      "b": 5
    }]
  }
]

这是我的代码,可在满足条件时添加额外的字段:

[{
    "a": 1,
    "b": 5,
    "c": [],
    "d": 3,
    "e": 1,
  },
  {
    "a": 2,
    "b": 6,
    "c": [],
    "d": 2,
    "e": 2
  },
  {
    "a": 3,
    "b": 7,
    "c": [],
    "d": 3,
    "e": 7
  }
]

data = [{
    "a": 1,
    "b": 5,
    "c": [{
      "a": 1,
      "b": 5
    }, {
      "a": 1,
      "b": 5
    }]
  },
  {
    "a": 2,
    "b": 6,
    "c": [{
      "a": 1,
      "b": 5
    }, {
      "a": 1,
      "b": 5
    }]
  },
  {
    "a": 3,
    "b": 7,
    "c": [{
      "a": 1,
      "b": 5
    }, {
      "a": 1,
      "b": 5
    }]
  }
]
const output = data.map(function(x) {
  if (this.has(x.a)) {
    return {
      ...x,
      "d": "",
      "e": this.size
    };
  }

  this.add(x.a);
  return {
    ...x,
    "d": this.size,
    "e": ""
  };
}, new Set());
console.log(output);

我需要我的字母“ c”属性,而不是返回null [],而是在映射之前返回相同的数据。

1 个答案:

答案 0 :(得分:0)

我认为这可能是浏览器兼容性问题。

扩展语法is not supported everywhere yet

您可能想看看诸如Object.asign之类的替代方法。 警告:it's not supported everywhere either

也许甚至是这个:

const data = [
  {
    "a": 1,
    "b": 5,
    "c": [{"a": 1, "b": 5}, {"a": 1, "b": 5}]
  },
  {
    "a": 2,
    "b": 6,
    "c": [{"a": 1, "b": 5}, {"a": 1, "b": 5}]
  },
  {
    "a": 3,
    "b": 7,
    "c": [{"a": 1, "b": 5}, {"a": 1, "b": 5}]
  }
];

data.forEach(function(x) {
  if (this.has(x.a)) {
    x.d = '';
    x.e = this.size;
  } else {
    this.add(x.a)
    x.d = this.size;
    x.e = '';
  }
}, new Set());
console.log(data);