Javascript 在对象数组中查找特定元素并添加它们

Javascript 在对象数组中查找特定元素并添加它们,javascript,arrays,object,sum,Javascript,Arrays,Object,Sum,假设我们有这样一个对象数组: array = [{ amount: 1000, cur: EUR }, { amount: 1500, cur: GBD }, { amount: 2000, cur: USD }, { amount: 2500, cur: SSL }] 现在我想为这个数组创建一个sum变量,它包含cur不是EUR和USD的amounts字段的总和。更具体地说,我想要一个类似于sumOther的变量,它等于1500+2500=4000。此变量包含

假设我们有这样一个对象数组:

array = [{
  amount: 1000,
  cur: EUR
}, {
  amount: 1500,
  cur: GBD
}, {
  amount: 2000,
  cur: USD
}, {
  amount: 2500,
  cur: SSL
}]

现在我想为这个数组创建一个sum变量,它包含cur不是EUR和USD的amounts字段的总和。更具体地说,我想要一个类似于
sumOther
的变量,它等于
1500+2500=4000
。此变量包含cur不是欧元和美元的金额之和。

过滤、减少,就完成了

var sumOther = array
                .filter(y => y.cur != EUR && y.cur != USD)
                .reduce((a, b) => a.amount + b.amount);


var sumOther = array
            .filter(function(y) { return y.cur != EUR && y.cur != USD })
            .reduce(function(a, b) { return a.amount + b.amount });

过滤,减少,你就完成了

var sumOther = array
                .filter(y => y.cur != EUR && y.cur != USD)
                .reduce((a, b) => a.amount + b.amount);


var sumOther = array
            .filter(function(y) { return y.cur != EUR && y.cur != USD })
            .reduce(function(a, b) { return a.amount + b.amount });
可以使用数组方法

希望这段代码有用

var sum = 0; // define a variable for adding amount
array.map(function(item){
    // check if currency is not EUR or GBD, then update the sum
    if(item.cur !=='EUR' && item.cur !=='GBD'){
    sum = sum+item.amount
    }

})
console.log(sum)
您可以使用数组方法

希望这段代码有用

var sum = 0; // define a variable for adding amount
array.map(function(item){
    // check if currency is not EUR or GBD, then update the sum
    if(item.cur !=='EUR' && item.cur !=='GBD'){
    sum = sum+item.amount
    }

})
console.log(sum)

您可以使用一个简单的循环,在每次迭代中测试
cur
的值,并将所需的值加到总数中

或者可以使用数组
.filter()
.reduce()
方法:

var数组=[
{金额:1000欧元},
{金额:1500,当前:'GBD'},
{金额:2000美元},
{金额:2500,cur:'SSL'}
]
var total=array.filter(函数(v){return!/EUR | USD/.test(v.cur)})
.reduce(函数(acc,current){return acc+current.amount},0)

log(total)
您可以使用一个简单的循环,在每次迭代中测试
cur
的值,并将所需的值添加到总数中

或者可以使用数组
.filter()
.reduce()
方法:

var数组=[
{金额:1000欧元},
{金额:1500,当前:'GBD'},
{金额:2000美元},
{金额:2500,cur:'SSL'}
]
var total=array.filter(函数(v){return!/EUR | USD/.test(v.cur)})
.reduce(函数(acc,current){return acc+current.amount},0)

console.log(总计)
排除的字符串未硬编码的示例:

const数组=[{amount:1000,cur:'EUR'},
{金额:1500,当前:'GBD'},
{金额:2000美元},
{金额:2500,cur:'SSL'}];
const exclude=[‘欧元’、‘美元’];
var sum=array.map(x=>(!exclude.includes(x.cur))?x.amount:false)
.减少((a,b)=>a+b);

控制台日志(总和)排除的字符串未硬编码的示例:

const数组=[{amount:1000,cur:'EUR'},
{金额:1500,当前:'GBD'},
{金额:2000美元},
{金额:2500,cur:'SSL'}];
const exclude=[‘欧元’、‘美元’];
var sum=array.map(x=>(!exclude.includes(x.cur))?x.amount:false)
.减少((a,b)=>a+b);

控制台日志(总和)请注意,这是ES6。很抱歉延迟,但这是不正确的。例如,如果我有三种不同的cur,除了欧元和美元,这个实现不起作用。如果我有三种不同的货币,它会显示NAN;如果我有一种货币,它会显示null。你能检查一下这个小提琴吗?我将
GBD
替换为
'GBD'
,以便可以对其进行测试。但在我最初的示例中,我使用了
GBD
作为变量,而不是字符串,就像您在问题中所做的那样,这可能是问题所在。请注意,这是ES6。很抱歉延迟,但这是不正确的。例如,如果我有三种不同的cur,除了欧元和美元,这个实现不起作用。如果我有三种不同的货币,它会显示NAN;如果我有一种货币,它会显示null。你能检查一下这个小提琴吗?我将
GBD
替换为
'GBD'
,以便可以对其进行测试。但在我最初的示例中,我使用了
GBD
作为变量,而不是字符串,就像您在问题中所做的那样,这可能是问题所在。如果您没有使用
.map()
中的返回值,则应该使用
.forEach()
,因为您只是在迭代,不映射。@nnnnnn同意您的意见如果您没有使用
.map()
中的返回值,您应该使用
.forEach()
,因为您只是在迭代,而不是映射。@nnnnnn同意您的意见