javascript - 使用字符串点表示法更新对象值

标签 javascript jquery

<分区>

function filterResult(field, value){
    var result = [
        {
            "name": "Johnson",
            "age": "12",
            "interests": {
                "color": "red"
            }
        },
        {
            "name": "Calvin",
            "age": "24",
            "interests": {
                "color": "blue"
            }
        }
    ];
    var filter = $.map(result, function(n, i){
        //other stuff here...
        n[field] = value; //dot notation
        return n;
    });
    return filter;
}

filterResult("interests.color","black");

有没有办法将字符串点符号 "interests.color" 转换为对象 "n[field]" 以更新值?

  • 请注意“interests.color”只是一个例子。有时水平可以更深,例如“interests.car.make.year”。动态是一种理念。

从其他帖子得到了答案。

function setterDotNotation(obj, str, value){
    if (typeof str == 'string'){
        return setterDotNotation(obj,str.split('.'), value);
    }else if (str.length==1 && value!==undefined){
        return obj[str[0]] = value;
    }else if (str.length==0){
        return obj;
    }else{
        return setterDotNotation(obj[str[0]], str.slice(1), value);
    }
}

最佳答案

您在这里不是在处理 JSON,而是在处理一个对象(更具体地说,是一个对象数组)。

无论如何,您可以.split() "interests.color" string on the "." 然后使用这两个部分:

var fieldNames = field.split(".");       // returns ["interests", "color"]
n[fieldNames[0]][fieldNames[1]] = value;

展开并运行以下代码片段以查看它在上下文中的工作情况:

function filterResult(field, value){
    var result = [
        {
            "name": "Johnson",
            "age": "12",
            "interests": {
                "color": "red"
            }
        },
        {
            "name": "Calvin",
            "age": "24",
            "interests": {
                "color": "blue"
            }
        }
    ];
    var filter = $.map(result, function(n, i){
        //other stuff here...
            var fieldNames = field.split(".");
            n[fieldNames[0]][fieldNames[1]] = value;
            return n;
    });
    return filter;
}

console.log( filterResult("interests.color","black") );
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>

关于javascript - 使用字符串点表示法更新对象值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42359312/

相关文章:

javascript - Onbeforeunload 不适用于 Chrome/Firefox,但适用于 IE

javascript - 如何将跨域添加到 &lt;script&gt; 标记?

jquery - 结合 Accordion 、jFlickerFeed 插件和水车图像轮播

javascript - 为点击事件返回 true 并继续

Javascript : Prevent overlapping on images that are sized randomly

javascript - Socket.io 未监听

javascript - url 中的双正斜杠会破坏路由器

javascript - 在html中提取表格行数据

jquery - 新的 jQuery 库包装技术的好处

javascript - 如何使用javascript覆盖ubuntu中默认的cmd快捷键