在对象数组中插入动态值,javascript

在对象数组中插入动态值,javascript,javascript,arrays,iterator,javascript-objects,Javascript,Arrays,Iterator,Javascript Objects,我有一个数组的对象,看起来像这样 [ {Number: 5002000, Origin: 123456, Count: 128}, {Number: 5002300, Origin: 900231, Count: 52}, {Number: 5002022, Origin: 534323, Count: 269} ] [ {Prefix: 50023, Price: 20}, {Prefix: 50020, Price: 10}, {Prefix: 5002, Price: 60},

我有一个数组的对象,看起来像这样

[
{Number: 5002000, Origin: 123456, Count: 128},
{Number: 5002300, Origin: 900231, Count: 52},
{Number: 5002022, Origin: 534323, Count: 269}
]
[
{Prefix: 50023, Price: 20},    
{Prefix: 50020, Price: 10},
{Prefix: 5002, Price: 60},
]
现在我尝试将“Count”值与指定价格池中的值相乘

看起来像这样

[
{Number: 5002000, Origin: 123456, Count: 128},
{Number: 5002300, Origin: 900231, Count: 52},
{Number: 5002022, Origin: 534323, Count: 269}
]
[
{Prefix: 50023, Price: 20},    
{Prefix: 50020, Price: 10},
{Prefix: 5002, Price: 60},
]
目前有一个可怕的if语句for循环

for (var key in sData) {
  if (sData[key].Origin.startsWith('50023')) {
    sData[key].sum = (sData[key].Count * 20);
  }
  else if (sData[key].Origin.startsWith('50020')) {
    sData[key].sum = (sData[key].Count * 10);
  }
  // continues...
}
startsWith是一个简单检查值是否以(值)开头的函数


JS中已经有映射两个对象数组的函数了吗?(我也有逻辑问题,因为“Prefix”值基本上必须自上而下,而不是落在默认的“5002”-前缀上。)

在这种情况下,您应该使用嵌套循环。同时切换到
Array.forEach
方法

sData.forEach(function(item_, key) {

          prices.forEach(function(item) {

             if (sData[key].Origin.startsWith(item.Prefix)) {
                sData[key].sum = (sData[key].Count * item.Price);
             }

          });  

 })

假设第二个数组可以转换为哈希:

var tiers = {
    50023: {Prefix: 50023, Price: 20},    
    50020: {Prefix: 50020, Price: 10},
    5002: {Prefix: 5002, Price: 60},
}
你可以让它看起来像这样:

for (var key in sData) {
    var key = String(sData[key])
    var keyIndex = key.slice(5)

    if (tiers.hasOwnProperty(keyIndex)) {
        var price = tiers[keyIndex].Price
        sData[key].sum = (sData[key].Count * price)
    } else {
        // Fallback solution
    }
}

更进一步说,您甚至可能会想到一些用于回退的递归解决方案。

但是前缀
5002
涵盖了其余前缀。优先顺序是什么?对,很简单,让我试试!当您在
sData
数组中操作项时,与
forEach
@ste2425相比,a更可取-map方法创建一个新数组。但是这里OP需要修改原始版本。@CharlieH我错过了这个事实,我的错,但是你可以做
sData=sData.map(x=>{})
Map
用于操作数组内容,
forEach
用于迭代。但另一方面,sData=sData.map(x=>{})看起来确实很难看。