如何创建一个新的对象而不是对其进行突变-javascript?
答案 0 :(得分:2)
您没有使用newData.map
的结果。另外,您不需要嵌套的映射,因为您要操作的只是一个特定的对象。
您需要找到的对象并对其进行更新。利用Array.prototype.find
查找状态的相关匹配对象,然后通过循环遍历使用范围数组对其进行更新
let ApiData1 = {
"type": "FeatureCollection",
"features": [
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon"
},
"properties": {
"color": 1,
"id": 10,
"stateId": 10,
"name": "Tamil Nadu",
"code": "TN"
}
},
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon"
},
"properties": {
"color": 1,
"id": 11,
"stateId": 11,
"name": "Karnataka",
"code": "KA"
}
},
{
"type": "Feature",
"geometry": {
"type": "MultiPolygon"
},
"properties": {
"color": 1,
"id": 12,
"stateId": 12,
"name": "Pondicherry",
"code": "PY"
}
}
]
}
let ApiData2 = [
{
id: 10,
name: "Tamil Nadu",
code: "TN",
latitude: 29.9964948,
longitude: 81.6855882,
latestMetric: {
stateId: 10,
year: 0,
numberOfProjects: 1433,
}
},
{
id: 11,
name: "Karnataka",
code: "KA",
latitude: 21.9964948,
longitude: 82.6855882,
latestMetric: {
stateId: 11,
year: 0,
numberOfProjects: 3500,
}
},
{
id: 12,
name: "Pondicherry",
code: "PY",
latitude: 22.9964948,
longitude: 87.6855882,
latestMetric: {
stateId: 12,
year: 0,
numberOfProjects: 5500,
}
}
];
function updateColor() {
function updateColorValue(colorJsonObject, colorValue) {
let updatedProperties = {
...colorJsonObject.properties,
color: colorValue
};
colorJsonObject.properties = updatedProperties;
return { ...colorJsonObject };
}
function updateProperties(colorJsonObject, colorValue) {
let updatedProperties = {
...colorJsonObject.properties,
color: colorValue
};
console.log(updatedProperties)
return updatedProperties;
}
let range = [
{
"Minimum": 1,
"Maximum": 2000,
"color": 1
},
{
"Minimum": 2000,
"Maximum": 4000,
"color": 2
},
{
"Minimum": 4000,
"Maximum": 6000,
"color": 3
}
]
let newData = {
...ApiData1,
features: ApiData1.features.map(colorObject => {
const apiData = ApiData2.find(apiData => {
if (
colorObject.properties.stateId === apiData.latestMetric.stateId
) {
return true;
}
return false;
});
let newValue;
range.forEach(i => {
if (
apiData.latestMetric.numberOfProjects >= i.Minimum &&
apiData.latestMetric.numberOfProjects <= i.Maximum
) {
let value = updateProperties(colorObject, i.color)
newValue = {...colorObject,properties:value}
}
});
return newValue;
})
}
return newData;
}
let colorValue = updateColor();
console.log(colorValue);