【问题标题】:How to iterate over a string and find out if it is available in an object literal?如何遍历字符串并确定它是否在对象文字中可用?
【发布时间】:2013-05-08 04:25:16
【问题描述】:
var leet = {
    h: 1,
    e: 2,
    r: 3,
    o: 4,
    l: 5
};

var s = "hello";
var fin = "";

for (var i in s) {
    if (leet.hasOwnProperty(i)) {
        fin + = leet[i];
    } else {
        fin + = i
    }
}
console.log(fin);

为什么我会收到错误消息?

【问题讨论】:

  • 连接语法不正确。应该是+=,没有空格。
  • 你的错误是什么......??
  • 不要使用for in 循环遍历字符串。使用for (var i = 0; i < s.length; i++) { 并使用s.charAt(i) 获取信件。
  • 根据您在输出中实际需要的内容,可以使用以下方法:jsfiddle.net/W9gbJ
  • @FaisalSayed - 谢谢伙计!就是这个。

标签: javascript object for-loop literals hasownproperty


【解决方案1】:

您的 i 值为 0,1,2,3,4 .. 要获取 char ,您应该使用 s[i] 并且字符串 concat 是 += 而不是 + =

我是说

for (var i in s)
{
   alert(i);   // Gives 0,1,2,3,4
   alert(s[i]);  // Gives h,e,l,l,o
}

下面的代码给你预期的结果

var leet = {
        h: 1,
        e: 2,
        r: 3,
        o: 4,
        l: 5
    };

var s = "hello";
var fin = "";

for (var i in s) {
    if (leet.hasOwnProperty(s[i])) {
        fin += leet[s[i]];
    } else {
        fin += i
    }
}
alert(fin);

Working JS Fiddle

【讨论】:

  • 单击链接 man 并查看输出.. 你没有眼睛吗...??此代码的输出为 12554 .. 点击 jsfiddle.net/HCcC3
  • 太棒了!就是这样!谢谢
  • @user1223844 同样..我也不知道投反对票的原因..即使现在,你也可以接受..
  • @user1223844 点击我的答案左侧的勾号
  • 我没有投反对票,但有人可能这样做的原因是因为这个热门话题:stackoverflow.com/questions/500504/… ... 在这种情况下,我认为它的使用没有潜在的错误,但如果你选择要在更复杂的示例中使用此技术,您可能会遇到问题。尽管您只在“拥有自己的”属性上执行代码,但它仍然在原型链上一直循环遍历每个属性/方法。常规的 for(1 = 0; i
【解决方案2】:

编辑为 fin += leet[i]fin += i 删除其中的空格,然后现在您可以得到结果为 "01234"

【讨论】:

    【解决方案3】:

    对象String 的连接运算符是+= 而不是+ =

    为了获取fin,根据s中的内容获取值,ypur代码应该是这样的

    for (var i in s) {
        if (leet.hasOwnProperty(s[i])) {
            fin += leet[s[i]];
        } 
    }
    

    【讨论】:

    • 是的,这绝对有帮助!
    猜你喜欢
    • 2018-07-06
    • 2016-10-06
    • 2020-04-28
    • 1970-01-01
    • 2016-04-14
    • 2020-01-12
    • 2019-03-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多