JavaScript:如何在迭代过程中修改数组中的值?
嗨,新手问题JavaScript:如何在迭代过程中修改数组中的值?,javascript,arrays,node.js,Javascript,Arrays,Node.js,嗨,新手问题 var aarr = [ { "label": "Name", "visible": true, "value": "HOW" }, { "label": "Age", "visible": false, "value": "23" }, { "label": "goodToGo", "visible": false, "value": "Yes" }, { "label": "authe
var aarr = [
{
"label": "Name",
"visible": true,
"value": "HOW"
},
{
"label": "Age",
"visible": false,
"value": "23"
},
{
"label": "goodToGo",
"visible": false,
"value": "Yes"
},
{
"label": "authenticatedflag",
"visible": true,
"value": "No"
}
];
场景:(如何在单循环中实现此逻辑)
需要根据此条件修改上述数组:
例如:如果label==“Name”&&“value”==“HOW”,则将Age.value修改为
“27”和authenticatedflag.value为“否”,在同一循环中,
label==“Age”&&“value”==“27”然后,将goodogo.value修改为
否,并将authenticatedflag.value设置为“是”
代码的一部分将被删除
aarr.map(aObj => {
if(aObj.label === "Name" && aObj.value === "HOW") {
// In this case i need to modify the aarr contents
}
// Before this loop executes the aarr contents should be changed.
if(aObj.label === "Age" && aObj.value === "27") {
// Once again modify the contents of the array before passing to next condition
}
});
@Tushar的第2条评论似乎起了一半作用
if (arr.find(o => o.label === 'Name' && o.value === 'HOW')) {
arr.find(o => o.label === 'Age').value = 27;
arr.find(o => o.label === 'authenticatedflag').value = 'No';
} else if (arr.find(o => o.label === 'Age' && o.value === '27')) {
arr.find(o => o.label === 'goodToGo').value = 'No';
arr.find(o => o.label === 'authenticatedflag').value = 'Yes';
}
console.log(arr);
/*
[ { label: 'Name', visible: true, value: 'HOW' },
{ label: 'Age', visible: false, value: 27 },
{ label: 'goodToGo', visible: false, value: 'Yes' },
{ label: 'authenticatedflag', visible: true, value: 'No' } ]
*/
在这种情况下,只有一个条件得到满足,实际上它需要同时满足这两个条件
var arr = [{
"label": "Name",
"visible": true,
"value": "HOW"
}, {
"label": "Age",
"visible": false,
"value": "23"
}, {
"label": "goodToGo",
"visible": false,
"value": "Yes"
}, {
"label": "authenticatedflag",
"visible": true,
"value": "No"
}];
/* if (arr.find(o => o.label === 'Name' && o.value === 'HOW')) {
arr.find(o => o.label === 'Age').value = 27;
arr.find(o => o.label === 'authenticatedflag').value = 'No';
}
if (arr.find(o => o.label === 'Age' && o.value === '27')) {
arr.find(o => o.label === 'goodToGo').value = 'No';
arr.find(o => o.label === 'authenticatedflag').value = 'Yes';
}
console.log(arr); */
/*
[ { label: 'Name', visible: true, value: 'HOW' },
{ label: 'Age', visible: false, value: 27 },
{ label: 'goodToGo', visible: false, value: 'Yes' },
{ label: 'authenticatedflag', visible: true, value: 'No' } ]
*/
var a = arr.map(aObj => {
if(aObj.label === "Name" && aObj.value === "HOW") {
arr.find(o => o.label === "Age").value = '27';
arr.find(o => o.label === "authenticatedflag").value = 'No';
}
if(aObj.label === "Age" && aObj.value === '27') {
arr.find(o => o.label === 'goodToGo').value = 'No';
arr.find(o => o.label === 'authenticatedflag').value = 'Yes';
}
return aObj;
});
/*
[ { label: 'Name', visible: true, value: 'HOW' },
{ label: 'Age', visible: false, value: '27' },
{ label: 'goodToGo', visible: false, value: 'No' },
{ label: 'authenticatedflag', visible: true, value: 'Yes' } ]
*/
这似乎符合我的条件。但这是唯一的办法吗?或者有什么好方法可以修改这些值吗?我会将数组的结构(如果可能)修改为更合适的:
var obj = {
"Name": {
"visible": true,
"value": "HOW"
},
"Age": {
"visible": false,
"value": "23"
},
"goodToGo": {
"visible": false,
"value": "Yes"
},
"authenticatedflag": {
"visible": true,
"value": "No"
}
}
这将帮助您执行以下操作:
if (obj.Name.value === 'HOW') {
obj.Age.value = 27;
obj.authenticatedFlag.value = 'No';
}
if (obj.Age.value === 27) {
obj.goodToGo.value = 'No';
obj.authenticatedFlag.value = 'Yes';
}
甚至更多
如果无法修改结构本身,我仍会尝试转换数组本身:
这将把您的数组转换为我建议的结构(以防您无法更改服务器的响应)
乐:我现在看到你在使用ES2015(我很高兴你这么做:))。这里有一个更新的提琴:
map
将用您返回的任何内容替换当前迭代中的值,因此只需修改aObj
,然后返回它。if(arr.find(o=>o.label=='Name'&&o.value=='HOW'){arr.find(o=>o.label==''Age')。value=27;arr.find(o=>o.label=='authenticatedflag').value='No';}else如果(arr.find(o=>o.label=='Age'和&o.value==''27'){arr.find(o=>o.label=='=''goodogo')。value='No';arr.find(o=>o.label==''authenticatedflag')。value='Yes'}
感谢Marty和Tushar,if将研究这两个建议。以及@Marty如何在使用map时修改同一数组中的两个值,当条件满足时,我需要在同一数组中的另一个map?Oops太新手了,我想有人浪费了2分来否决我的问题:)。无论如何,在我看来,这是个新手问题。@Marty说地图“替换”是误导。它从返回的值创建一个新数组,它不会就地修改数组(虽然它可以用于此,但forEach更合适)。感谢您的回答,让我分析并检查它。
var arr = [
{
"label": "Name",
"visible": true,
"value": "HOW"
}, {
"label": "Age",
"visible": false,
"value": "23"
}, {
"label": "goodToGo",
"visible": false,
"value": "Yes"
}, {
"label": "authenticatedflag",
"visible": true,
"value": "No"
},
];
var res = arr.map(function (item) {
var result = {};
result[item.label] = {
visible: item.visible,
value: item.value
};
return result;
}).reduce(function (acc, it) {
return Object.assign(acc, it);
});