[英]ecma6 shortest for loop with if check
what is the shortest way to achieve this for loop in ecmascript 6: ecmascript 6中实现此for循环的最短方法是什么:
var data = {
sales: [
{
name: "Jim Frost",
region: "USA East",
phone: "212-555-1212",
email: "jfrost@acme-travel.com"
},
{
name: "Jan Smith",
region: "USA West",
phone: "310-555-1212",
}
]
};
here is my attempt to see if the key is equal to my manually set variable, then i change that key item's field, if not, i change it to something else. 这是我尝试查看密钥是否等于手动设置的变量,然后更改该密钥项的字段,如果不相同,则将其更改为其他内容。
var str = '0'; // could also be an integer
for (var key in data.sales) {
key === str ? data.sales[key].region = 'StateChosen' : data.sales[key].region = 'stateEliminated';
}
what is the shortest way to achieve this using ecma6, object.keys, map, filter, every, etc methods? 使用ecma6,object.keys,map,filter,every等方法实现此目的的最短方法是什么?
Your example could be done just by doing: 您的示例可以通过执行以下操作来完成:
data.sales.forEach(el => el.region = 'stateEliminated'); // Change every region to eliminated
data.sales[str].region = 'StateChosen'; // Change back the selected to StateChosen.
Note: I am assuming that str
is a valid key in data.sales
. 注意: 我假设 str
是data.sales
的有效键。
A for of
loop with destructuring assignment and .entries()
would help. 带有解构赋值和.entries()
for of
循环将有所帮助。
for (let [k, v] of data.sales.entries())
v.region = k == str ? 'StateChosen' : 'stateEliminated';
var data = { sales: [ { name: "Jim Frost", region: "USA East", phone: "212-555-1212", email: "jfrost@acme-travel.com" }, { name: "Jan Smith", region: "USA West", phone: "310-555-1212", } ] }; var str = '0'; for (var [k, v] of data.sales.entries()) v.region = k == str ? 'StateChosen' : 'stateEliminated'; console.log(data);
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.