循环中的javascript变量键

问题描述 投票:1回答:1

使用Slickgrid,我试图使用setCellCssStyles方法设置一个单元格的CSS。

for (var rowIndx = 1; rowIndx < movmentRows.length; rowIndx++) {
  grid.setCellCssStyles("disabled", {
    rowIndx: {
      san: "slick-cellreadonly",
      ean: "slick-cellreadonly",
    },
  });
}

我知道这是因为我在for循环中使用了一个变量作为键,但我不明白如何让它工作。我试着用[rowIndx]替换rowIndx,但是我得到了语法错误,所以我认为我的JavaScript不是ES6。然后我又尝试了下面的方法,但也出现了语法错误。

遇到'['和预期的关键字或括号。

for(var rowIndx=1;rowIndx<movmentRows.length;rowIndx++){
  var key = {};
  grid.setCellCssStyles("natCol-greyed", {
    key[rowIndx] : {
      sourceAccountNational: "slick-cellreadonly",
      excludeAccountNational: "slick-cellreadonly"
    }
  });
}

请提出建议。

javascript slickgrid
1个回答
0
投票

如果你想创建一个对象,但又想使用一个变量作为键,语法如下。

let keyName = "foo"

let object = { [keyName]: "bar" }
 // gives the object `{"foo": "bar}

在旧的javascript中,你必须在创建对象后再分配给一个键。

let keyName = "foo"

let object = {}
object[keyName] = "bar"

另外,当我可以使用迭代器时,我尽量不做 "手动 "循环。它比 "手动 "循环更不容易出错,而且允许你使用不同类型的集合,而不仅仅是数组,所以它更灵活。"手动 "循环主要有两种方法。

A for … of 循环。

let collection = ["a", "b", "c"]

for (let value of collection) {
  console.log("value:", value)
}
// if you also want the index
for (let [index, value] of collection.entries()) {
  console.log("value and index:", value, index)
}
// or _just_ the indexes (note this skip empty values in sparse arrays)
for (let index of collection.keys()) {
  console.log("index:", index)
}

使用 forEach:

collection.forEach((item, index) => console.log(item, index))

这两种方法的效果通常差不多,但在以下情况下: for … of 循环更接近于 "手动 "循环。然而, forEach 是比较老的,所以可能会有更多的地方。另外,看看类似的 map.


0
投票

如果 movementRows 是一个数组,你可以使用 for...的循环,就像这样。

for (const [index, row] of movmentRows.entries()) { //index is the index of each itteration and row is the value
  grid.setCellCssStyles("disabled", {
    [row]: {
      san: "slick-cellreadonly",
      ean: "slick-cellreadonly",
    },
  });
}

要把一个对象的键设置为变量 你可以把它放在括号里

注意for...of循环。在IE中不支持。

更多关于如何动态设置对象属性的内容。

更多关于......的循环

© www.soinside.com 2019 - 2024. All rights reserved.