更改JSON数组中的值并返回更新的数组JS

时间:2017-01-31 13:38:35

标签: javascript arrays json function

我有一个JSON对象,我将产品价格(数量)作为一个值。

我想要的是将价格值转换为现有对象中的字符串

我使用地图功能:

var prods = [
  {
    "id": "id-1",
    "price": 239000,
    "info": "info-1"
  },

  {
    "id": "id-2",
    "price": 90770,
    "info": "info-2"
  },

  {
    "id": "id-3",
    "price": 200787868,
    "info": "info-3"
  },
];


prods.map(function(a) {
         a.price.toString()
        .replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ');
})

我希望地图功能可以更新我的 prods 对象,但它保持不变。

(Un)working JS Bin

我想知道,如何将初始对象更新为我需要的对象?

5 个答案:

答案 0 :(得分:2)

字符串是不可变的。

String#replace返回一个新字符串,因此您需要一个作业。

虽然您只需要更改一个属性,但可以使用Array#forEach

var prods = [{ id: "id-1", price: 239000, info: "info-1" }, { id: "id-2", price: 90770, info: "info-2" }, { id: "id-3", price: 200787868, info: "info-3" }];

prods.forEach(function(a) {
    a.price = a.price.toString().replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ');
});

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

答案 1 :(得分:1)

您需要将价值分配回'价格'更换后

prods.map(function(a) {
         a.price = a.price.toString()
        .replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ');
})

答案 2 :(得分:1)

你需要使用这个

示例代码

prods.map(function(a) {
             a.price = ""+a.price;
})

答案 3 :(得分:1)

请注意var table = pptSlide.Shapes.AddTable(); destRange = targetSheet.get_Range("A1:B15"); for (int i = 1; i <= destRange.Rows; i++) { for (int j = 1; j <= destRange.Columns; j++) { table.Table.Cell(i, j).Shape.TextFrame.TextRange.Text =destRange[i, j].Text; } } 将一个函数应用于数组中的每个元素,您可以返回新数组,它不会修改现有数组,因此您需要将新数组赋值给某个变量。

&#13;
&#13;
map
&#13;
&#13;
&#13;

答案 4 :(得分:0)

您只更新传递给map函数的lambda内的价格。 您应该创建一个存储新值的新数组。

let newArray= [];
prods.map(function(a) {
     a.price = a.price.toString()
    .replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ');
     newArray.push(a);
})

这样可以解决问题,让原始阵列保持不变。

Try it out here in the Ramda REPL

此致 菲利克斯