javascript - 在对象中插入或替换值的方法

标签 javascript arrays object

我有一个这样的对象

var obj2= {
        'home' : {
            '1' : {
                  'year' : '1999'
                  },
            '2' : {
                  'year' : '2000'
                  'month' : '11'
                  },
        },
        'company' : {
            '1' : {
                  'year' : '2010'
                  'month' : '2'
                  },
        }
    };

如果这个 key 链已经存在,我想在对象中添加更多的键或替换值,例如:

buss_type = "home",
type_id = "1",
date_type = "month",
value = "9"

var tmp_obj1 = {[buss_type]: {[type_id]: {[date_type]: value}}};

buss_type = "company",
type_id = "2",
date_type = "month",
value = "12"

var tmp_obj2 = {[buss_type]: {[type_id]: {[date_type]: value}}};

制作对象:

obj = {
    'home' : {
        '1' : {
            'year' : '1999',
            'month' : '9'
        },
        '2' : {
            'year' : '2000',
            'month' : '11'
        },
    },
    'company' : {
        '1' : {
            'year' : '2020',
            'month' : '10'
        },
        '2' : {
            'month' : '12'
        }
    },
};

.push().concat() 等数组方法仅在末尾添加新键,而不是替换现有键的值。

是否有任何对象方法可以使其易于管理,或者我应该只使用循环并在添加新值或更改现有值之前检查所有键?

谢谢。

最佳答案

您可以为键取一个数组并保存最后一个键以供直接分配。

function setValue(object, path, value) {
    var last = path.pop();
    path.reduce(function (o, k) {
        return o[k] = o[k] || {};
    }, object)[last] = value;
}

var object = { home: { 1: { year: '1999' }, 2: { year: '2000', month: '11' } }, company: { 1: { year: '2010', month: '2' } } };

setValue(object, ["home", "1", "month"], "9");
setValue(object, ["company", "2", "month"], "12");

console.log(object);
.as-console-wrapper { max-height: 100% !important; top: 0; }

关于javascript - 在对象中插入或替换值的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47306579/

相关文章:

javascript - 向注释图表添加部分?

c++ - 调用另一个函数的私有(private)成员——数组和类型的问题

c - 如何使用 Collat​​z 猜想函数在 C 中返回 int 数组?

java - 在循环内创建对象

javascript - 使用 Crossfilter 如何返回特定类型的所有 id 值的数组

javascript - 如何在 React Native 中将 activeID 的状态设置为 MapBox 上选定图标的特定 feature.id

Javascript 按字母顺序排序并将所有 double 移动到数组的末尾

javascript - 在对象声明中使用 jquery 方法 .find()

javascript - 为什么 instanceof 对 babel-node 下的 Error 子类实例不起作用?

javascript - 如果项目不存在,$.inArray 函数不会返回 "-1"