gpt4 book ai didi

Javascript 迭代问题 - 可变变量

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:37:51 25 4
gpt4 key购买 nike

不是旧 JS 的专家所以这里开始

我有

store1.baseParams.competition = null;
store2.baseParams.competition = null;
store3.baseParams.competition = null;

我想做的是

for (i=1; 1<=3; 1++) {
store + i +.baseParams.competition = null;
}

希望我想做的事情有意义 - 是否可能

基本上通过添加来创建一个变量/对象

干杯

最佳答案

实现此目的的一种方法是通过 eval() - (通常是一个非常糟糕的主意)

for (var i=1; i<=3; i++) {
eval("store" + i + ".baseParams.competition = null;");
}

另一种更复杂但相对有效的方法是创建一个函数,使您能够在运行时动态地改变任意深度的对象层次结构。这是一个这样的函数:

/*
Usage:
Nested objects:
nested_object_setter(object, ['property', 'propertyOfPreviousProperty'], someValue);
Top-level objects:
nested_object_setter(object, 'property', someValue);
*/

function dynamic_property_setter_base(obj, property, value, strict) {
var shouldPerformMutation = !strict || (strict && obj.hasOwnProperty(property));
if(shouldPerformMutation) {
obj[property] = value;
}
return value;
}

function dynamic_property_setter(obj, property, value) {
return dynamic_property_setter_base(obj, property, value, false);
}

function nested_object_setter(obj, keys, value) {
var isArray = function(o) {
return Object.prototype.toString.call(o) === '[object Array]';
};

//Support nested keys.
if(isArray(keys)) {
if(keys.length === 1) {
return nested_object_setter(obj, keys[0], value);
}

var o = obj[keys[0]];
for(var i = 1, j = keys.length - 1; i < j; i++)
o = o[keys[i]];
return dynamic_property_setter(o, keys[keys.length - 1], value);
}

if(keys != null &&
Object.prototype.toString.call(keys) === '[object String]' &&
keys.length > 0) {
return dynamic_property_setter(obj, keys, value);
}

return null;
}

您的代码如下所示:

for(var i = 1; i <= 3; i++) 
nested_object_setter(this, ['store' + i, 'baseParams', 'competition'], null);

这是另一个例子,在 JS 控制台中运行:

> var x = {'y': {'a1': 'b'}};
> var i = 1;
> nested_object_setter(this, ['x','y','a' + i], "this is \"a\"");
> x.y.a1
"this is "a""

另一种方法,恕我直言,这是最简单但可扩展性最低的方法:

this['store' + i].baseParams.competition = null;

关于Javascript 迭代问题 - 可变变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5039379/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com