从地图内设置变量

时间:2019-03-22 13:45:08

标签: javascript reactjs

我有以下代码:

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并在其中抛出。

3 个答案:

答案 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)

相关问题