javascript - 在javascript中使用动态键名推送数组值
问题描述
我正在使用一个函数将值推送到具有两个参数的数组。在此第二个参数指示数组的级别。所以我需要使用此level
参数值将值推送到该数组。
这是我的代码:
addLevel1(i, level) {
let advArr1 = {};
let nextLevel = parseInt(level)+1
advArr1["level"+level+"_adv_url"] = "";
advArr1["level"+level+"_custom_variables"] = "";
advArr1["level"+level+"_percentage"] = "";
advArr1["level"+level+"_status"] = "";
advArr1["level"+nextLevel] = [];
this.containers[i].level1.push(advArr1);
console.log(this.containers);
};
在这个插入
this.containers[i].level1.push(advArr1);
我需要level1的动态值。即如果参数级别为 1 它应该是
this.containers[i].level1.push(advArr1);
如果参数级别为2,它将是
this.containers[i].level2.push(advArr1);
解决方案
对象的意义在于,您可以通过名称轻松查找属性。当您将动态级别变量混入其中时,您会破坏该目的:
const levels = [
{ level1_status: "ok" },
{ level2_status: "wrong" }
];
for(const level of levels) {
// How to get the status here?
level["level" + /*How to get the level?*/ "_status"]
}
现在,您应该有静态键,所以所有级别都应该有相同的键。要区分不同的级别,您可以使用level 属性:
const levels = [
{ level: 1, status: "ok" },
{ level: 2, status: "wrong" }
];
for(const level of levels) {
console.log("Level:", level.level); // isn't that simple?
console.log("has Status:", level.status); // Wohoo!
}
现在接下来的事情是containers[i].level1
:如果levels
容器上有一个数组属性,则可以containers[i].levels[1]
毫无问题地访问它。主要的好处是,您现在可以轻松地遍历容器的不同级别:for(const level of container.levels)
.
在容器有这样一个数组的假设下,您的代码可能是:
addLevel(i, level){
this.containers[i].levels[level] = {
level,
nextLevel: level + 1,
advUrl: "",
percentage: 0, // does make more sense than a string, right?
status: "",
};
}
// somewhere:
context.addLevel(/*i*/ 0, /*level*/ 1);
推荐阅读
- jenkins - Jenkins 管道将 Node + Gulp 项目中生成的战争发布到 Artifactory
- android - 使用 mock-maker-inline 配置时的 Mockito MissingMethodInvocationException
- wordpress - 在 Wordpress 中上传文件
- bash - ( if [ -z "$1" ] ) 条件在 bash 编程中意味着什么
- python - 使用 python 请求上传文件
- reactjs - 是否可以安装仅包含 Material-UI 一个组件的包?
- flutter - 错误:在提供程序包中找不到类型“SingleChildCloneableWidget”
- javascript - 使用反应路由器时如何将道具传递给路由
- python - 为什么要通过计算字符的异或来比较两个字符串?
- python - 交换线空间图的轴