首页 > 解决方案 > 在javascript中将新列表字段添加到对象

问题描述

我正在努力将(将 json 转换为 json 列表)列表添加到 json。这是示例:

config = {
  existing_variable: 'example'
}


addToListing = (field, value, index=0) => {
  config = {
    ...config,
    listing: {   
      ...config.listing,
      [field]: value
    }   
  }
}

addToListing('first', 1, 0)
addToListing('second', 2, 0)
addToListing('first', 3, 1)


console.log(config)

结果:

{
  existing_variable: 'example', 
  listing: 
  { 
    first: 3, 
    second: 2 
  } 
}

预期结果:

{ 
  existing_variable: 'example', 
  listing: 
  [
    {first: 1, second: 2}, 
    {first: 3}
  ] 
}

我尝试了不同的方法,但我所做的并不合适(例如嵌套值或开始时的完整初始化)。

能否请你帮忙?

标签: javascriptarraysjsonlist

解决方案


您可以添加一些检查并倒回数组。

const addToListing = (field, value, index=0) => {
    config = {
        ...config,
        listing: Object.assign(
            [],
            (config.listing || []), 
            { [index]: { ...(config.listing?.[index] || []), [field]: value } }
        )    
    }
};

var config = { existing_variable: 'example' };

addToListing('first', 1, 0);
addToListing('second', 2, 0);
addToListing('first', 3, 1);

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

没有可选的链接运算符?.,但具有更多默认值。

const addToListing = (field, value, index=0) => {
    config = {
        ...config,
        listing: Object.assign(
            [],
            (config.listing || []), 
            { [index]: { ...((config.listing || [])[index] || []), [field]: value } }
        )    
    }
};

var config = { existing_variable: 'example' };

addToListing('first', 1, 0);
addToListing('second', 2, 0);
addToListing('first', 3, 1);

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


推荐阅读