我有以下代码:
let pa = 0;
let pw = 0;
let pc = 0;
let pi = 0;
let pr = 0;
this.state.array.data.map((i) => {
if (i.mdn === this.queryParams.mdn && i.sources != null) {
return (i.sources.map((sources) => {
if (sources.source.toString().toLowerCase() === "a") {
pa = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "w") {
pw = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "c") {
pc = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "i") {
pi = sources.t.sessions.u
}
if (sources.source.toString().toLowerCase() === "r") {
pr = sources.t.sessions.u
}
}))
}
},
this.setState({
web: [],
app: [],
preference: [{a: pa}, {w: pw}, {c: pc}, {i: pi}, {r: pr}]
}),
一旦我进入设置状态,它实际上并没有设置它,它只是取0并在其中抛出。
答案 0 :(得分:0)
尝试使用Array.prototype.map
并通过密钥设置首选项对象,而不是使用Array.prototype.forEach
。
要保留键的顺序,请创建所需顺序的数组。
let order = [ 'a', 'w', 'c', 'i', 'r' ];
preference = {
a : 0,
w : 0,
c : 0,
i : 0,
r : 0
};
this.state.array.data.forEach((item) => {
if (item.mdn === this.queryParams.mdn && item.sources != null) {
return item.sources.forEach((entry) => {
var key = entry.source.toString().toLowerCase();
preference[key] = entry.t.sessions.u;
});
}
});
this.setState({
web: [],
app: [],
preference: order.map(key => ({ [key] : preference[key] }));
}),
答案 1 :(得分:0)
我在这里做出了很大的假设,因为您从未提供过建议,而我只是忽略了您在评论中提到的内容。
现在我真正想到的应该是一个简单的发现和一张地图
const lookup = []
const data = this.state.array.data
const content = data.find(obj => obj.mdn === this.queryParams.mdn && obj.sources
let preferences = defaultValues //<-- define defaultValues
if (content) {
preferences = content.sources.map(({source, t}) =>
({ [lookup[source.toLowerCase()]] : t.sessions.u })
}
this.setState({ preferences })
如果mdn可以包含多个,则超出forEach和其他一些逻辑的要求。
答案 2 :(得分:-1)
正如胡安·门德斯(Juan Mendes)指出的那样;如果每个变量只能找到一项,则只需使用特定于该变量的查找操作即可。对于每个变量,它看起来像这样;
const someArray = [{ property: "a", text: "lorem"}, { property: "b", text: "ipsum"}]
const pa = someArray.find(function(item) {
return item.property === 'a'
})
console.log(pa)
如果您没有确切的一次查找操作,请执行以下操作:使用Array.forEach()而不是Array.map(),因为map中的回调应该返回一个值,而您可以使用forEach修改(不同的)变量。
例如:
let pa = 0
const someArray = ['lorem', 'ipsum', 'dolor']
someArray.forEach(function(word) {
pa = word
})
console.log(pa)