Javascript 对象的干净数组

Javascript 对象的干净数组,javascript,arrays,Javascript,Arrays,我的实施情况如下: var test = [{},{},{}]; 我的测试变量是一个对象数组。在这种情况下,最后一个对象可以是空的,也可以有键 如果最后一个对象为空,我需要始终删除它 我现在写的东西很有效,因此: var lengthofTest = test.length; if(Object.keys(test[lengthofTest]).length == 0) { test.pop(); } 有更好的方法吗?还有更直接的吗 有更好的方法吗 取决于你对“更好”的定义:-)对我来说

我的实施情况如下:

var test = [{},{},{}];
我的测试变量是一个对象数组。在这种情况下,最后一个对象可以是空的,也可以有键

如果最后一个对象为空,我需要始终删除它

我现在写的东西很有效,因此:

var lengthofTest = test.length;
if(Object.keys(test[lengthofTest]).length == 0) {
 test.pop();
 }
有更好的方法吗?还有更直接的吗

有更好的方法吗

取决于你对“更好”的定义:-)对我来说,这是一个好方法,除了几个细节:

  • 您需要的是
    测试[lengthofTest-1]
    ,而不是
    测试[lengthofTest]
    。(请记住,索引从
    0
    开始,所以它是
    0
    length-1

  • 您不需要变量

  • 如果不使用结果,则无需使用
    pop
    ,只需减小
    length

  • 因此:

    还有更直接的吗

    您可以在中使用

    var lengthofTest = test.length;
    for (var key in test[lengthofTest-1]) {
        if (test[lengthofTest-1].hasOwnProperty(key)) {
            --test.length;
            break;
        }
    }
    

    …但正如您所看到的,它要详细得多,在上面,它假设数组上没有非索引属性(关于我的意思的详细信息)。

    是的!!!只是运行它来意识到我错过了最长的1。是的,第二种方法非常冗长谢谢大家!@普密辛哈尔:我在上面加了几个小注释。你好,那是纽约。。我喜欢第三点。虽然我必须保留var,因为我的实际对象处于对象继承权的深处。。所以最好是为长度设置一个var
    var lengthofTest = test.length;
    for (var key in test[lengthofTest-1]) {
        if (test[lengthofTest-1].hasOwnProperty(key)) {
            --test.length;
            break;
        }
    }