Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/406.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 使用字符串访问JSON或JS属性_Javascript_Json - Fatal编程技术网

Javascript 使用字符串访问JSON或JS属性

Javascript 使用字符串访问JSON或JS属性,javascript,json,Javascript,Json,我有一个JSON数组,如下所示: _htaItems = [ {"ID":1, "parentColumnSortID":"0", "description":"Precondition", "columnSortID":"1", "itemType":0}, {"ID":2, "parentColumnSortID":"0", "description":"Precondition", "columnSort

我有一个JSON数组,如下所示:

_htaItems = [
    {"ID":1,
     "parentColumnSortID":"0",
     "description":"Precondition",
     "columnSortID":"1",
     "itemType":0},
    {"ID":2,
     "parentColumnSortID":"0",
     "description":"Precondition",
     "columnSortID":"1",
    "itemType":0}]
我想通过将ID、列名和新值传递给函数来更新它:

    function updateJSON(ID, columnName, newValue)
    {
        var i = 0;
        for (i = 0; i < _htaItems.length; i++)
        {
            if (_htaItems[i].ID == ID)
            {
                ?????
            }
        }
    }  

但是在我的原因中,列名是作为字符串传递的;
还是我误解了您的意思?

您需要使用方括号表示法,就像您对数组索引所做的那样:

_htaItems[i][columnName] = newValue;

只需执行
\u htaItems[i][columnName]=newValue。它会将
columnName
中指定的属性更改为
newValue

在JavaScript中,您可以使用文字符号访问对象属性:

the.answer = 42;
s = "description";
_htaItems[x][s] = 'New Value';
或使用括号表示法,使用字符串作为属性名称:

the["answer"] = 42;
这两条语句的作用完全相同,但在第二条语句中,因为括号中的是字符串,所以它可以是解析为字符串的任何表达式(或者可以强制为字符串)。所以所有这些都做了同样的事情:

x = "answer";
the[x] = 42;

x = "ans";
y = "wer";
the[x + y] = 42;

function foo() {
    return "answer";
}
the[foo()] = 42;
…将对象的
属性
设置为
42

因此,如果示例中的
description
不能是文字,因为它是从其他地方传递给您的,则可以使用括号表示法:

the.answer = 42;
s = "description";
_htaItems[x][s] = 'New Value';

公平地说,这可能是您按“代码样式”按钮所花的时间;)您有一个JavaScript数组,而不是JSON。可能重复的@jagdipa Felix是对的——这里没有JSON。您有一个使用array literal语法生成的数组,其中包含使用object literal语法生成的对象。@Felix-这可能与其他问题重复,但我没能很快找到一个使用方括号表示法超过一层的方法。@JAAulde:这并没有什么区别。这是一个令人尴尬的简单方法:这是一个很好的解释!我读了几千篇文章,都找不到答案。只要救我一天。非常感谢。漂亮的解释!非常感谢。