【问题标题】:How to push non empty object into an array?如何将非空对象推入数组?
【发布时间】:2017-06-23 15:01:31
【问题描述】:

输入:

var npi = {'test1':{'address':'','num':'12'},'test2':{'address':'','num':'12'},'test3':{'address':'cleveland','num':'12'},'test4':{'address':'hostun','num':'12'}}

预期输出:

var array = ['cleaveland','hostun']

即仅在地址可用时推送。

我的代码:

for(var i = 0;i < = 4;i++){
    if(npi.test+''+i.address) {
        array.push(npi.test+''+i.address);
    }
}

但由于我犯了错误,它无法正常工作,有人可以帮助我吗? 谢谢。

【问题讨论】:

标签: javascript arrays angular object


【解决方案1】:

您可以获取 npi 对象的键,过滤它们以仅获取 'testN'(其中 N 是任意数字)并且具有非空白的 .address 的键,然后映射:

var npi = {'not':{},'nsi':{}, 'test1':{'address':'','num':'12'},'test2':{'address':'','num':'12'},'test3':{'address':'cleveland','num':'12'},'test4':{'address':'hostun','num':'12'}}

var array = Object.keys(npi)
  .filter(function(k) { return /^test\d+$/.test(k) && npi[k].address })
  .map(function(k) { return npi[k].address })

console.log(array)

进一步阅读:

【讨论】:

  • 嗨 nnnn,如果我有对象,如何执行
  • npi = {'not':{},'nsi:{},'test1':{'address':'','num':'12'},'test2':{ 'address':'','num':'12'},'test3':{'address':'cleveland','num':'12'},'test4':{'address':'hostun' ,'num':'12'}}
  • 这并不能保证顺序,而 OP 的代码(如果工作)会
  • 我只需要推送测试对象地址
  • @Duster 检查我的答案。
【解决方案2】:

您可以使用Object.keys() 完成此操作

var npi = {
    'test1': {
        'address': '',
        'num': '12'
    },
    'test2': {
        'address': '',
        'num': '12'
    },
    'test3': {
        'address': 'cleveland',
        'num': '12'
    },
    'test4': {
        'address': 'hostun',
        'num': '12'
    }
};

var addressArr = [];

var objKeys = Object.keys(npi);
for (var i = 0; i < objKeys.length; i++) {
    if (npi[objKeys[i]].address) {
        addressArr.push(npi[objKeys[i]].address);
    }
}

console.log(addressArr)

【讨论】:

    【解决方案3】:

    此代码将解决您的问题:

    var array = [];
    var keys = Object.keys(npi).slice();
    for(key of keys){
      if(npi[key].address != ''){
        array.push(npi[key].address);
      }
    }
    

    【讨论】:

    • npi = {'not':{},'nsi:{},'test1':{'address':'','num':'12'},'test2':{ 'address':'','num':'12'},'test3':{'address':'cleveland','num':'12'},'test4':{'address':'hostun' ,'num':'12'}}
    • 我只需要考虑测试
    【解决方案4】:

    问题在于您如何访问对象中的属性。您需要使用 bracket 表示法来动态访问属性,就像这样。

    var npi = {'test1':{'address':'','num':'12'},'test2':{'address':'','num':'12'},'test3':{'address':'cleveland','num':'12'},'test4':{'address':'hostun','num':'12'}};
    
    var array = []
    
    for(var i = 1;i <= 4;i++){
      // access npi test properties dynamically with bracket [] syntax
      var address = npi["test"+i].address;
      if(address) {
        array.push(address);
      }
    }
    
    console.log(array);

    【讨论】:

      【解决方案5】:

      试试这个:

      var objNPI = Json.parse(npi); for(var i = 0;i < = 4;i++){ var prop = 
      objNPI[i].address; if(prop) { array.push(objNPI); } }
      

      【讨论】:

        猜你喜欢
        • 2017-05-01
        • 2016-12-25
        • 2019-03-24
        • 1970-01-01
        • 2020-03-23
        • 2017-12-05
        • 2020-02-08
        • 2023-03-14
        相关资源
        最近更新 更多