[英]How to add a property to my object using a map
我想添加這個“可見”屬性並更改我的“國家/地區”數組,“el2”已正確更改,但最后我的數組與預期不符。
元素正在進入條件並被添加到新屬性,但在循環結束時數組沒有按預期出現
const countryVisible: any = ['EUA', 'CANADA']
const countries: any = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}]
countries.map((el2, index2) => {
countryVisible.forEach((el, index) => {
if (el2['name'] === el) {
el2 = {...el2, visible: true}
console.log(el2) // {name: 'EUA', id: '123', visible: true} and {name: 'CANADA', id: '321', visible: true}
} else {
el2 = {...el2, visible: false}
console.log(el2) //{name: 'Italia', id: '322', visible: false}
}
})
})
console.log(countries)
output:
[
{
"name": "EUA",
"id": "123"
},
{
"name": "CANADA",
"id": "321",
"visible": false
},
{
"name": "Italia",
"id": "322",
"visible": false
}
]
預計 output:
[
{
"name": "EUA",
"id": "123",
"visible": true
},
{
"name": "CANADA",
"id": "321",
"visible": true
},
{
"name": "Italia",
"id": "322",
"visible": false
}
]
您的代碼存在一些小問題; 兩個問題(可能是 3 個):
return el2;
在map
方法中countries
,因此,countries
應該用let
聲明然后,有一個主要問題:
countryVisible
數組而不是基於正在考慮的國家/地區 object 設置visible
的 state,因此可以將可見的 state 設置為false
,即使它是第一次設置為true
。 例如。 EUA
將在最終結果中設置為false
。 const countryVisible = ['EUA', 'CANADA']; let countries = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}]; countries = countries.map((el2, index2) => { if( countryVisible.includes( el2['name'] ) ) { el2 = {...el2, visible: true};; } else { el2 = {...el2, visible: false};; } return el2; }); console.log(countries);
更好的方法:
考慮使用map
並將visible
屬性添加到映射元素。
const countryVisible = ['EUA', 'CANADA']; const countries = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}]; const output = countries.map( ({name,id}) => ({name,id,visible:countryVisible.includes(name)}) ); console.log( output );
您可以用.includes方法替換forEach
循環
const countryVisible = ['EUA', 'CANADA']; const countries = [{name: 'EUA', id: '123'}, {name: 'CANADA', id: '321'}, {name: 'Italia', id: '322'}]; const result = countries.map((country) => ({...country, visible: countryVisible.includes(country.name), })); console.log(result);
.as-console-wrapper { max-height: 100%;important: top; 0; }
您可以使用此語法將條件屬性分配給 JS object。 (ES6)
const a = {
...(someCondition && {b: 5})
}
或者你可以使用 Javascript Object.defineProperty 內置 function
Object.defineProperty(obj, 'foo', {
value: 1
})
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.