【问题标题】:How to concatinate string ang a num in js如何在js中连接字符串和数字
【发布时间】:2017-07-11 19:46:31
【问题描述】:

我有这样的价值观

var npi = {
            code1: 'sm1',
            code2: 'sm8',
            code3: 'sm9',
            code4: ''
          }

我想将前 3 个项目推入一个数组

var arr = [];
for (var i =0;i< 3;i++) {
  arr.push(npi.code+''+i);
}

它说错误 npi.code 未定义,因为它没有考虑 npi.code1 而不是 npi.code。

我认为它的 concat 问题。任何人都可以建议我帮助。谢谢。

【问题讨论】:

  • 没有npi.code0 你的i0开始
  • 使用npi['code'+i]
  • 考虑使用Object.keys
  • 为什么只有前 3 个?难道你只想要没有空的一次吗?

标签: javascript angularjs concat meanjs


【解决方案1】:

npi.code+''+i 不起作用,因为没有这样的密钥 code+''+i 。相反,您可以通过npi['code'+i] 的这种方式访问​​密钥(就像使用索引访问数组一样)。

同样在您的代码中,以0code0 开头的i 未定义。所以,i 应该以1 开头

试试这个

var arr = [];
for (var i = 1;i <= 3;i++) {
  arr.push(npi['code'+i]);
}

【讨论】:

  • 需要从 1 开始,解释正在发生的事情也是个好主意 + 也许解释 Object.keys?
  • 我刚刚编辑了工作代码。问题的所有者应该自己编辑..
  • @SagarV 确实,他也可以解释为什么应该使用方括号,但是杜尔加的答案也应该被更新/否决
  • @Icepickle Durga 的回答 -> 投反对票 -> 他编辑了 -> 投赞成票
  • @SagarV True :) 我也赞成这两个答案 ;) 很高兴你如此一致
【解决方案2】:

var npi = {
            code1: 'sm1',
            code2: 'sm8',
            code3: 'sm9',
            code4: ''
          }

var arr = [];
for (var i =1;i<= 3;i++) {
  arr.push(npi['code'+i]);
}
console.log(arr)

对于你的情况,从1迭代到3,并从obj中获取值,比如npi['code'+i],这里你需要使用括号作为Property_accessors,因为它将值作为字符串。

【讨论】:

    【解决方案3】:

    您可以使用Object.keys() 方法和forEach() 循环:

    var npi = {
      code1: 'sm1',
      code2: 'sm8',
      code3: 'sm9',
      code4: ''
    }
    var arr = [];
    
    Object.keys(npi).forEach(function(key) {
        if(npi[key] != ''){
          arr.push(npi[key]);
        }
    });
    console.log(arr);

    Object.keys() 方法返回给定对象自己的可枚举属性的数组,其顺序与 for...in 循环提供的顺序相同(区别在于 for -in 循环也枚举原型链中的属性)。

    您的代码不起作用的原因是,当尝试使用. 表示法获取对象的值时,该属性不能是字符串(当您使用+''+ 连接时,您实际上将对象属性 转换为字符串)。字符串仅适用于[]。例如:

    arr.push(npi.code + '' + i); //returns undefined
    arr.push(npi['code' + i]); //returns your value

    【讨论】:

    • @SagarV,哦,好吧,你是对的。相应地更正了我的答案。
    • 其实你没有,你只是排除了可能的空值(这不是问题)
    • 我撤回了投票。但仅供参考,当它完成 3 次迭代时,你应该打破它。
    • 我明白你在说什么,但逻辑在哪里?!我认为 OP 的意图是将 non-empty 元素推送到新数组中。原始的array 可能包含多个元素,而不仅仅是4 个。我认为我的示例适用于更多级别并且更具动态性。您可以根据需要给予尽可能多的反对票,但我认为这是更好的答案。
    • @SagarV,哦,好的。对此感到抱歉。我的错。
    【解决方案4】:

    首先,如果你想附加到对象键,你应该使用 npi['code' + i] 而不是 npi.code+i。因为npi.code+i的意思是将(i)的值追加到npi中的key(code)的值上,不存在的。

    其次,您应该从 i = 1 而不是 i = 0 开始循环。这样循环以 npi['code1'] 而不是 npi['code0'] 开始,后者也不存在。

    此外,循环条件应该是 i

    var arr = [];
    
    for (var i = 1 ; i < 4 ; i++) {
        arr.push(npi['code' + i]);
    }
    console.log(arr);
    

    【讨论】:

      【解决方案5】:

      试试这个

      var arr = [];
      for (var i =0;i< 3;i++) {
        arr.push(npi['code'+i]);
      }
      

      【讨论】:

        猜你喜欢
        • 2017-12-18
        • 2021-11-30
        • 1970-01-01
        • 1970-01-01
        • 2011-10-22
        • 2016-01-09
        • 1970-01-01
        相关资源
        最近更新 更多