在多维JSON数组中切片列的最后2个对象

时间:2019-01-23 11:27:16

标签: javascript arrays json object javascript-objects

我可能忽略了具有相同问题的主题。但我似乎无法弄清楚。我想删除最后一列中的项目。尝试了forEach但对我不起作用,它删除了myArr的完整第一列(例如)。 Maby而不是删除切片?

例如,我有这个JSON数组(myArr):

    let myArr = JSON.parse(this.responseText);
    let myColumnYears = Object.keys(myArr);
    let myColumnInhabitants = 
    Object.values(myArr[0]);

    myArr.forEach(function() {
          delete myColumnYears[0];
        });

[
 {
    "1996": "7959017",
    "1997": "7968041",
    "1998": "7976789",
    "1999": "7992324",
},
{
    "1996": "10156637",
    "1997": "10181245",
    "1998": "10203008",
    "1999": "10226419",
},
{
    "1996": "7071850",
    "1997": "7088906",
    "1998": "7110001",
    "1999": "7143991",
}
]

我想删除每个数组的最后2个对象,因此结果变为:

[
{
   "1996": "7959017",
   "1997": "7968041",
},
{
   "1996": "10156637",
   "1997": "10181245",

},
{
   "1996": "7071850",
   "1997": "7088906",
}
]

我想我要更具体一些。

2 个答案:

答案 0 :(得分:4)

您可以使用.map()遍历数组,选择感兴趣的属性,然后将它们作为对象返回。

let data = [
  {"1996": "7959017", "1997": "7968041", "1998": "7976789","1999": "7992324"},
  {"1996": "10156637", "1997": "10181245", "1998": "10203008", "1999": "10226419" },
  {"1996": "7071850", "1997": "7088906", "1998": "7110001", "1999": "7143991" }
];

let result = data.map(o => ({"1996": o["1996"], "1997": o["1997"]}));

console.log(result);
.as-console-wrapper { max-height: 100% !important; top: 0; }

答案 1 :(得分:0)

如果对象中有更多的密钥对值,会发生什么?您将需要修改map函数。

为避免这种情况,可以使用另一种方法来解决此问题。尝试在对象中添加更多键值对,此代码将始终删除最后两个键值对。

let data = [
  {"1996": "7959017", "1997": "7968041", "1998": "7976789","1999": "7992324"},
  {"1996": "10156637", "1997": "10181245", "1998": "10203008", "1999": "10226419" },
  {"1996": "7071850", "1997": "7088906", "1998": "7110001", "1999": "7143991" }
];

data.forEach((element, index) => {
  const keys = Object.keys(element);
  
  delete element[keys[keys.length - 1]];
  delete element[keys[keys.length - 2]];
});

console.log(data);
.as-console-wrapper { max-height: 100% !important; top: 0; }