查找并删除对象

时间:2016-03-23 07:00:57

标签: javascript jquery

这是我的对象数组:

var data = [
  {
    "label": "HOME",
    "href": "web-tutor99.com",
    "children": [{}]
  }, 
  {
    "href": "web-tutor99.com",
    "label": "HTML5"
  }
];

这是一个多维对象,这里的children属性为空。如何找到这样的空属性并使用jQuery删除它们?

4 个答案:

答案 0 :(得分:1)

你可以这样做..

for (var i in data) {
  if (test[i].children === null || test[i].children === undefined || test[i].children.length<=0) {
    delete test[i].children;
  }
}

但是我认为浪费CPU周期循环遍历对象以删除空对象没有实际用途。

不确定你想要实现的目标。但你最好只检查它是否为空,然后不显示它的情况。

答案 1 :(得分:1)

试试这个

&#13;
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
&#13;
<Root>
    <Element>
         ...
    </Element>
    ...
</Root>
[binary invalid content]
&#13;
&#13;
&#13;

答案 2 :(得分:0)

你可以简单地创建一个循环遍历所有元素的(如果是嵌套的,递归的)函数,并检查它是否有值,如果没有,delete该属性。

在您的示例对象中,您遇到的问题是children属性到目前为止并非为空 - 它是一个属性,其值为包含一个空对象的数组。根据您的情况,您必须多次运行您的对象,逐步删除空条目(可能会进行一些优化)。

最后一点,您可以使用for...in循环浏览对象的属性,并使用for...of循环访问对象的/数组值。< / p>

答案 3 :(得分:0)

我认为以下纯JS片段负责这项工作。您可以查看@ JSBin

var data = [{"label":"HOME","href":"web-tutor99.com","children":[{}]},{"href":"web-tutor99.com","label":"HTML5"}];

function walkJSONObj(obj){
  for (var prop in obj) {
    if (obj[prop].constructor === Array) {        //if prop is an array 
      walkJSONArray(obj[prop]);                   //go walk through the arrays
      obj[prop].length === 0 && delete obj[prop]; //if on return the array is empty delete it
    }
    else typeof obj[prop] === 'undefined' && delete obj[prop]; //delete undefined props
  }    
}

function walkJSONArray(arr){
  for (var l = arr.length-1; l >= 0; l--) {
    walkJSONObj(arr[l]); // go walk the item objects
    if (Object.keys(arr[l]).length === 0 && JSON.stringify(arr[l]) === JSON.stringify({})) {
      arr.splice(l, 1);  // if on return the object is empty delete it
    }
  }
}

walkJSONArray(data);