Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 更改JSON数组中的值并返回更新的数组JS_Javascript_Arrays_Json_Function - Fatal编程技术网

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

Javascript 更改JSON数组中的值并返回更新的数组JS,javascript,arrays,json,function,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":

我有一个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 ');
})
我希望map函数更新我的prods对象,但它保持不变

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

字符串是不可变的

返回一个新字符串,因此需要赋值

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

var prods=[{id:“id-1”,价格:239000,信息:“info-1”},{id:“id-2”,价格:90770,信息:“info-2”},{id:“id-3”,价格:200787868,信息:“info-3”}];
产品forEach(功能(a){
a、 price=a.price.toString().replace(/(\d)(?=(\d{3})+(\d{3})/g,$1');
});
控制台日志(prods)

.as控制台包装{max height:100%!important;top:0;}
替换后,需要将值重新分配给“price”

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

你需要用这个

示例代码

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

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

let newArray= [];
prods.map(function(a) {
     a.price = a.price.toString()
    .replace(/(\d)(?=(\d{3})+(\D|$))/g, '$1 ');
     newArray.push(a);
})
这将实现这个技巧,并使原始数组保持不变

问候,,
Felix

请注意,
map
对数组中的每个元素应用一个函数,您可以返回新数组,它不会修改现有数组,因此您需要将新数组分配给某个变量

var prods=[
{
“id”:“id-1”,
“价格”:239000,
“信息”:“信息-1”
},
{
“id”:“id-2”,
“价格”:90770,
“信息”:“信息-2”
},
{
“id”:“id-3”,
“价格”:200787868,
“信息”:“信息-3”
},
];
prods=prods.map(函数(a){
a、 price=a.price.toString()
.replace(/(\d)(?=(\d{3})+(\d{$)/g,“$1”);
返回a;
});

控制台日志(prods)映射返回一个新数组,因此您必须执行类似于newarr=prods.map的操作(函数(a){return a.price.toString().replace(/(\d)(?=(\d{3})+(\d{$)/g,$1');});注意“返回”是必需的