忽略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",

我从API得到的Json结果如下

Json结果:

"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);