我有一个包含8个对象的数组的JSON文件。
我需要将其变成具有16个对象的数组,其中每个对象重复两次,并为每个对象赋予一个单独的ID
我设法使这样的元素数量翻倍
let d = data.reduce(function (res, current) {
return res.concat([current, current]);
}, []);
然后我尝试像这样添加ids
d.forEach((item, index) => {
item.id = index;
})
我不确定为什么,但是所有重复项都具有相同的id
JSON对象的结构
[
{
"name": "name",
"description": "description"
}
]
代码
export const fetchData = () => dispatch => {
let d = data.reduce(function (res, current) {
return res.concat([current, current]);
}, []);
d.forEach((item, index) => {
item.id = index;
});
dispatch({
type: FETCH_DATA,
payload: d
});
};
答案 0 :(得分:0)
current
是一个引用对象,您需要在数组内使用Object.assign({}, current)
以确保获得原始对象的2个副本,如下所示:
let d = data.reduce(function (res, current) {
return res.concat([Object.assign({}, current), Object.assign({}, current)]);
}, []);
或使用传播算子,如
let d = data.reduce(function (res, current) {
return res.concat([{...current}, {...current}]);
}, []);
答案 1 :(得分:0)
正如其他人提到的那样,如果您要更改相同的对象引用而不是创建新的对象引用,则会出现问题。
您还可以将ID分配也移动到reduce中:
const data = [
{
"name": "name",
"description": "description"
},
{
"name": "name2",
"description": "description2"
}
]
const d = data.reduce((res, current) => [
...res,
{
...current,
id: res.length
},
{
...current,
id: res.length + 1
}],
[]);
console.log(d);