Javascript 在对象数组中连接字符串
我有如下的对象数组。我想通过它循环并获得闭合的属性值。它应该是在每个对象中找到的所有值的串联 例如,在下面的例子中,我希望最终结果为121212,因为它在所有3个对象中都有12个Javascript 在对象数组中连接字符串,javascript,arrays,reactjs,loops,object,Javascript,Arrays,Reactjs,Loops,Object,我有如下的对象数组。我想通过它循环并获得闭合的属性值。它应该是在每个对象中找到的所有值的串联 例如,在下面的例子中,我希望最终结果为121212,因为它在所有3个对象中都有12个 const data = [ { "personId": "1208007855", "details": { "Closed": "12" } },
const data = [
{
"personId": "1208007855",
"details": {
"Closed": "12"
}
},
{
"personId": "1559363884",
"details": {
"Closed": "12"
}
},
{
"personId": "973567318",
"details": {
"Closed": "12"
}
}
]
有人能告诉我如何做到这一点吗。我试过这种方法,但没有成功。我只能得到第一个对象的值。不确定如何在这个循环中连接和存储下一个值
可能存在某些对象可能没有闭合属性的情况
const totalClosed = data.forEach(function (arrayItem) {
const x = arrayItem.details.Closed;
console.log(x);
});
请尝试以下操作:
常数数据=[
{
人名:1208007855,
详情:{
闭馆时间:12
}
},
{
人名:1559363884,
详情:{
闭馆时间:12
}
},
{
人名:973567318,
详情:{
闭馆时间:12
}
}
];
结果=;
让我输入数据{
结果+=数据[i].details.Closed
}
此外,使用forEach时,元素的处理顺序可能不同于0到n,您可能会发现不同于预期的结果。如果需要字符串和数组,最好的方法是reduce: 您可以使用.reduce功能: data.reduceacumerator,item=>acumerator+=item.details.Closed
=>121212如果要使用循环实现,请尝试使用:
const data = [
{
"personId": "1208007855",
"details": {
"Closed": "12"
}
},
{
"personId": "1559363884",
"details": {
"Closed": "12"
}
},
{
"personId": "973567318",
"details": {
"Closed": "12"
}
}
];
var res= ''
data.forEach((item)=>{if(item.details.Closed){ res += item.details.Closed;}})
console.log(res)
这也可以通过使用高阶函数来实现:
尝试使用:
data.reduce((res, item) =>{if(item.details.Closed)
res += item.details.Closed;
return res}, '')
如果关闭字段存在,您可以创建一个空字符串并添加到其中。如果“closed”中存在另一个条件,您可以在if语句中进行检查。以函数方式,使用reduce
常数数据=[
{
人名:1208007855,
详情:{
闭馆时间:12,
分析:10
}
},
{
人名:1559363884,
详情:{
闭馆时间:12,
分析:10
}
},
{
人名:973567318,
详情:{
闭馆时间:12,
分析:10
}
}
]
const{Closed,Analyze}=data.reduceac,cur=>{
附件关闭+=当前?详细信息?关闭??
acc.ANALYSE+=当前?详细信息?分析??
返回acc
},{关闭:,分析:}
console.log{Closed,Analyze}使用foreach的方式与您尝试的方式完全相同:
const data = [
{
personId: '1208007855',
details: {
Closed: '12'
}
},
{
personId: '1559363884',
details: {
Closed: '12'
}
},
{
personId: '973567318',
details: {
Closed: '12'
}
}
];
let totalClosed = '';
data.forEach(function (arrayItem) {
totalClosed = totalClosed + arrayItem.details.Closed;
});
console.log(totalClosed);
您可以通过在reducer中对条目进行分解并将关闭的值连接到运行的res结果来减少数据条目。可以使用nullish合并运算符??连接时使用空字符串而不是未定义的字符串 常数数据=[ {个人ID:1208007855,详细信息:{已关闭:12}}, {人名:1559363884,详细信息:{关闭:12}}, {personId:0000000000,详细信息:{Open:8}},//新建! {个人ID:973567318,详细信息:{已关闭:12}} ]; const value=data.reduceres,{details:{Closed}}=>res+Closed;
console.logvalue@Naren-如果我有另一个属性Analyze和Closed,如何在单个reduce中连接这两个属性的值?您可以使用object保存所有字符串作为结果。让我来that@ArenTrot更新了代码当数据[i].details.Closed未定义时案例如何在该案例中使用结果=;对于让我输入数据2{if typeof data2[i]?.details?.Closed!=“undefined”result+=data2[i]?.details?.Closed}当数据[i].details.Closed未定义时,情况如何?如果字段未定义,您可以写入项。details?.Closed??而不是item.details.Closed。如果item.details.Closed为null ish,它将返回一个空字符串:data.reduceacumerator,item=>acculator+=item.details?.Closed,
data.reduce((res, item) =>{if(item.details.Closed)
res += item.details.Closed;
return res}, '')
let str = ''
const totalClosed = data.forEach(function (arrayItem) {
if(arrayItem.details.Closed){
str += arrayItem.details.Closed;
}
});
console.log(str)
const data = [
{
personId: '1208007855',
details: {
Closed: '12'
}
},
{
personId: '1559363884',
details: {
Closed: '12'
}
},
{
personId: '973567318',
details: {
Closed: '12'
}
}
];
let totalClosed = '';
data.forEach(function (arrayItem) {
totalClosed = totalClosed + arrayItem.details.Closed;
});
console.log(totalClosed);