忽略json的最后一个元素
我从API得到的Json结果如下 Json结果:忽略json的最后一个元素,json,ecmascript-6,lodash,Json,Ecmascript 6,Lodash,我从API得到的Json结果如下 Json结果: "Issues": [{ "Id": null, "Key": null, "Values": [{ "Key": "Display Name", "Value": "Rya" }, { "Key": "UserName", "Value": "RH" }, { "Key": "Count",
"Issues": [{
"Id": null,
"Key": null,
"Values": [{
"Key": "Display Name",
"Value": "Rya"
},
{
"Key": "UserName",
"Value": "RH"
},
{
"Key": "Count",
"Value": "350"
}
]
},
{
"Id": null,
"Key": null,
"Values": [{
"Key": "Display Name",
"Value": "Mike"
},
{
"Key": "UserName",
"Value": "ML"
},
{
"Key": "Count",
"Value": "90"
}
]
}
]
我做了如下映射-
.Issues.map(o =>
o.Values.reduce((acc, {
Key,
Value
}) =>
(acc[Key] = Value, acc), {}));
{ "Display Name": 'Rya', "UserName" : "RH", value: 350 },
{ "Display Name": 'Mike', "UserName" : "ML", value: 90 }
映射结果如下所示-
.Issues.map(o =>
o.Values.reduce((acc, {
Key,
Value
}) =>
(acc[Key] = Value, acc), {}));
{ "Display Name": 'Rya', "UserName" : "RH", value: 350 },
{ "Display Name": 'Mike', "UserName" : "ML", value: 90 }
预期结果:
{ "Display Name": 'Rya', "UserName" : "RH" },
{ "Display Name": 'Mike', "UserName" : "ML"}
在我的需求中,我想忽略期望结果中显示的最后一个元素
.Issues.map(o=>o.Values.reduce((acc,{Key,Value})=>(Key!='Count')?(acc[Key]=Value,acc):acc,{})代码>
.Issues.map(o=>o.Values.reduce((acc,{Key,Value})=>(Key!='Count')?(acc[Key]=Value,acc):acc,{})
一种解决方案是在reduce之前添加一个过滤器,以过滤掉具有不需要的Count
属性的对象
.Issues.map(o =>
o.Values
.filter(({ Key }) => Key !== 'Count')
.reduce((acc, {
Key,
Value
}) =>
(acc[Key] = Value, acc), {}));
当Key===“Count”
时,您也可以通过不添加对象在缩减过程中进行内联过滤
注意:JS对象中没有最后一个属性。它是一组属性,其实际顺序依赖于实现且不可靠。例如,在不同的浏览器和平台中打印对象可能会给出任何顺序,没有任何东西可以保证一致性。一种解决方案是在reduce之前添加一个过滤器,以过滤掉具有不需要的Count
属性的对象
.Issues.map(o =>
o.Values
.filter(({ Key }) => Key !== 'Count')
.reduce((acc, {
Key,
Value
}) =>
(acc[Key] = Value, acc), {}));
当Key===“Count”
时,您也可以通过不添加对象在缩减过程中进行内联过滤
注意:JS对象中没有最后一个属性。它是一组属性,其实际顺序依赖于实现且不可靠。例如,在不同的浏览器和平台中打印对象可能会给出任何顺序,但没有任何东西可以保证一致性。请注意,在reduce方法中,函数也会在当前索引中传递,并且会调用数组reduce。因此,如果要忽略数组的最后一个元素,可以执行以下操作:
Issues.map(o =>
o.Values.reduce((acc, {Key, Value}, idx, arry) => {
if(idx < arry.length -1)
acc[Key] = Value;
return acc;
}, {}
);
Issues.map(o=>
o、 Value.reduce((acc,{Key,Value},idx,arry)=>{
如果(idx
请注意,在reduce方法中,函数也在当前索引中传递,并且正在调用数组reduce。因此,如果要忽略数组的最后一个元素,可以执行以下操作:
Issues.map(o =>
o.Values.reduce((acc, {Key, Value}, idx, arry) => {
if(idx < arry.length -1)
acc[Key] = Value;
return acc;
}, {}
);
Issues.map(o=>
o、 Value.reduce((acc,{Key,Value},idx,arry)=>{
如果(idx
要删除最后一个元素,而不管数组中有多少项,我都喜欢这样:
let result = data.Issues.map(issue => {
let temp = issue.Values;
temp.splice(-1);
return temp.reduce((acc, {Key, Value}) => (acc[Key] = Value, acc), {});
});
下面是删除最后一个元素的,不管数组中有多少项我都喜欢这样:
let result = data.Issues.map(issue => {
let temp = issue.Values;
temp.splice(-1);
return temp.reduce((acc, {Key, Value}) => (acc[Key] = Value, acc), {});
});
这里有一个最简单的解决方案,它是map、slice和reduce的组合:
json.Issues.map(b =>
b.Values.slice(0, -1).reduce((c,d) => {
c[d.Key] = d.Value;
return c;
}, {}));
演示:
设j={
“问题”:[{
“Id”:空,
“键”:空,
“价值观”:[{
“键”:“显示名称”,
“值”:“Rya”
},
{
“密钥”:“用户名”,
“值”:“RH”
},
{
“键”:“计数”,
“值”:“350”
}
]
},
{
“Id”:空,
“键”:空,
“价值观”:[{
“键”:“显示名称”,
“值”:“迈克”
},
{
“密钥”:“用户名”,
“值”:“ML”
},
{
“键”:“计数”,
“值”:“90”
}
]
}
]
};
设r=j.Issues.map(b=>
b、 值。切片(0,-1)。减少((c,d)=>{
c[d.键]=d.值;
返回c;
}, {}));
console.log(r);
最简单的解决方案是map、slice和reduce的组合:
json.Issues.map(b =>
b.Values.slice(0, -1).reduce((c,d) => {
c[d.Key] = d.Value;
return c;
}, {}));
演示:
设j={
“问题”:[{
“Id”:空,
“键”:空,
“价值观”:[{
“键”:“显示名称”,
“值”:“Rya”
},
{
“密钥”:“用户名”,
“值”:“RH”
},
{
“键”:“计数”,
“值”:“350”
}
]
},
{
“Id”:空,
“键”:空,
“价值观”:[{
“键”:“显示名称”,
“值”:“迈克”
},
{
“密钥”:“用户名”,
“值”:“ML”
},
{
“键”:“计数”,
“值”:“90”
}
]
}
]
};
设r=j.Issues.map(b=>
b、 值。切片(0,-1)。减少((c,d)=>{
c[d.键]=d.值;
返回c;
}, {}));
console.log(r);