【问题标题】:How can I prevent object to get converted to string while adding both together?如何防止对象在将两者相加时转换为字符串?
【发布时间】:2019-03-06 13:44:53
【问题描述】:

我正在尝试编写一个逻辑来修改包含列表的数组 的对象。例如:

    [
        {
            "S.N.": "1",
            "ITEM": "CIGARETTES",
            " QUANTITY SOLD ": " 3,603,221 ",
            "UNIT OF MEASURE": "CARTONS"
        },
        {
            "S.N.": "2",
            "ITEM": "LIQUOR",
            " QUANTITY SOLD ": " 5,680,586 ",
            "UNIT OF MEASURE": "BOTTLES"
        },
        {
            "S.N.": "3",
            "ITEM": "BEER",
            " QUANTITY SOLD ": " 7,581,446 ",
            "UNIT OF MEASURE": "CANS"
        }]

这样我会得到如下的最终结果:

    "CIGARETTES": {
            "S.N.": "1",
            "ITEM": "CIGARETTES",
            "QUANTITY": " 3,603,221 ",
            "UNIT": "CARTONS"
        },
        "LIQUOR": {
            "S.N.": "2",
            "ITEM": "LIQUOR",
            "QUANTITY": " 5,680,586 ",
            "UNIT": "BOTTLES"
        },
        "BEER": {
            "S.N.": "3",
            "ITEM": "BEER",
            "QUANTITY": "7,581,446 ",
            "UNIT": "CANS"
        }

我希望 ITEM 名称显示在上面给出的对象之前。 我的逻辑如下:

    var callMe = function(){
    var newJson = json.map(function(item){
        var newItem = JSON.stringify(JSON.parse(item));
        newItem = item.ITEM + ':' + {item};
        return console.log(newItem)
    })
}

当我控制它时,我会收到以下信息:

 CIGARETTES:[object Object]
 LIQUOR:[object Object]
 BEER:[object Object]
 GOLD:[object Object]
 WATCHES:[object Object]

请告诉我如何阻止对象转换为字符串。

【问题讨论】:

  • 这个:newItem = item.ITEM + ':' + {item}; 是关键问题。你不能像那样组合对象。
  • newItem = {[item.ITEM]: JSON.stringify(item)}

标签: javascript string object


【解决方案1】:

似乎对 JSON 是什么(Javascript 对象表示法)存在误解。它只是正在发送的数据的格式。

您正在使用的只是一个数组/对象。

你不应该修改一个字符串化的对象来添加数据。处理对象本身,然后对其进行字符串化。

const data=[{"S.N.":"1","ITEM":"CIGARETTES"," QUANTITY SOLD ":" 3,603,221 ","UNIT OF MEASURE":"CARTONS"},{"S.N.":"2","ITEM":"LIQUOR"," QUANTITY SOLD ":" 5,680,586 ","UNIT OF MEASURE":"BOTTLES"},{"S.N.":"3","ITEM":"BEER"," QUANTITY SOLD ":" 7,581,446 ","UNIT OF MEASURE":"CANS"}]

const res = data.reduce((a,c)=>{
  a[c.ITEM] = c;
  return a;
}, {});

console.log(res);

//then JSON.stringify res

非缩减版:

const data=[{"S.N.":"1","ITEM":"CIGARETTES"," QUANTITY SOLD ":" 3,603,221 ","UNIT OF MEASURE":"CARTONS"},{"S.N.":"2","ITEM":"LIQUOR"," QUANTITY SOLD ":" 5,680,586 ","UNIT OF MEASURE":"BOTTLES"},{"S.N.":"3","ITEM":"BEER"," QUANTITY SOLD ":" 7,581,446 ","UNIT OF MEASURE":"CANS"}]

const res = {};
for(let i = 0; i < data.length; i++){
  res[data[i].ITEM] = data[i];
}

console.log(res);

//then JSON.stringify res

【讨论】:

  • 谢谢,@kemicofa :) 一种实现我想要的非常紧凑的方式 :)
【解决方案2】:

您可以使用reduce 进行转换

const   x = [
        {
            "S.N.": "1",
            "ITEM": "CIGARETTES",
            " QUANTITY SOLD ": " 3,603,221 ",
            "UNIT OF MEASURE": "CARTONS"
        },
        {
            "S.N.": "2",
            "ITEM": "LIQUOR",
            " QUANTITY SOLD ": " 5,680,586 ",
            "UNIT OF MEASURE": "BOTTLES"
        },
        {
            "S.N.": "3",
            "ITEM": "BEER",
            " QUANTITY SOLD ": " 7,581,446 ",
    }];
    
    const y = x.reduce(function(acc, item){
	acc[item.ITEM]= item;
	return acc;
}, {})

console.log(y);

【讨论】:

    【解决方案3】:

    遍历数组并将每个添加到一个对象中:

    const items = [{
        "S.N.": "1",
        "ITEM": "CIGARETTES",
        " QUANTITY SOLD ": " 3,603,221 ",
        "UNIT OF MEASURE": "CARTONS"
      },
      {
        "S.N.": "2",
        "ITEM": "LIQUOR",
        " QUANTITY SOLD ": " 5,680,586 ",
        "UNIT OF MEASURE": "BOTTLES"
      },
      {
        "S.N.": "3",
        "ITEM": "BEER",
        " QUANTITY SOLD ": " 7,581,446 ",
        "UNIT OF MEASURE": "CANS"
      }
    ]
    
    const output = {}
    
    items.forEach(i => {
      output[i.ITEM] = i
    })
    
    console.log(output)

    【讨论】:

    • 非常感谢!这真的很有帮助:) :) :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-03-30
    • 1970-01-01
    • 2021-07-02
    相关资源
    最近更新 更多