请告诉我删除嵌套的JavaScript对象属性的最佳方式是什么?(Whats the best wa

2019-08-06 23:31发布

我有一个树对象下面,我想,如果是空删除的项目数组属性。 我不知道到做到这一点,最好的方法?

我想通过按键循环的,检查属性,然后删除使用delete myJSONObject[prop] ...任何想法/想法,欢迎?

[{
    text: "TreeRoot",
    items: [{
        text: "Subgroup1",
        items: []
    }, {
        text: "Subgroup2",
        items: []
    }, {
        text: "Subgroup3",
        items: [],
        items: [{
            text: "subgroup5",
            items: [{
                text: "subgroup6",
                items: [{
                    text: "subgroup7",
                    items: [{
                        text: "subgroup8",
                        items: []
                    }]
                }]
            }]
        }]
    }]
}]

Answer 1:

这应该做的工作(ES5):

function removeEmpty(obj) {
  Object.keys(obj).forEach(function(key) {
    (key === 'items' && obj[key].length === 0) && delete obj[key] ||
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key])
  });
  return obj;
};

JSBIN

同样在ES6:

const removeEmpty = (obj) => {
  Object.keys(obj).forEach(key =>
    (key === 'items' && obj[key].length === 0) && delete obj[key] ||
    (obj[key] && typeof obj[key] === 'object') && removeEmpty(obj[key])
  );
  return obj;
};

JSBIN



Answer 2:

你可以有递归算法,在每一步会删除items阵列和回报,或递归地处理所述阵列的每个单独的对象。

我也想尝试这样做在服务器端。 这将节省大量的复杂性,存储器和处理时间。 通常有来自JSON编码字符串“不包括”空数组的方式。



文章来源: Whats the best way to remove a property from nested javascript Object?