2017-04-18 119 views
0

我基于JavaScript & Github的表情图标的工作表情系统上,我用一个函数来触发输入事件,这是我的代码访问对象属性的名称与循环

function myFunction() { 
    var y = document.getElementById("myInput").value; 
    var x = y.replace(/plus/g,'<img width="25" src="https://assets-cdn.github.com/images/icons/emoji/unicode/1f44d.png?v7" />'); 
    document.getElementById("demo").innerHTML = "You wrote: " + x; 
} 

它的工作很好,但它的不聪明 。

我尝试使用与循环处理Github Emoji API

var data = { 
    star: "https://assets-cdn.github.com/images/icons/emoji/unicode/2b50.png?v7" 
}; 

for (var i in data) { 
    console.log(data[i]); 
} 

for循环访问对象属性,但不显示它的名字,我需要更换属性名称的数组,最终的代码,我想到的是:

for (vari in data) { 
var x = string.replace(/${property_name}/g, data[i]); 
} 
+2

而不是注销'数据[I]'的 - 只要登录'i' - '我'是属性名称。你没有数组,你有一个对象。 – tymeJV

回答

1

对于完整性,更好的方法可能是避免循环和利用.replace s到需要一个回调函数能力:

var data = { 
    star: "https://assets-cdn.github.com/images/icons/emoji/unicode/2b50.png?v7" 
}; 

var pattern = new RegExp(Object.keys(data).join('|'), 'g'); 
var x = string.replace(pattern, function(match) { return data[match]; }); 
+0

它'像一个魅力的工作,但因为它的表情符号我需要通过链接到标签这样的回报'' –

+0

你可以从回调中返回任何你想要/需要的东西。这并没有改变这种方法的原则。 –

+0

是的,我明白了,这很好,谢谢 –

2

试试这个:

for (var key in data) { 
    if (data.hasOwnProperty(key)) { 
     var x = string.replace(new RegExp(key, "g"), data[key]); 
    } 
} 

如y OU使用for(var i in data)循环i是对象属性不data[i]

另外,如果你想构建从你必须创建一个RegExp对象的字符串正则表达式模式。

+0

我在这里不明白,为什么我需要'hasOwnProperty'? –

+0

@Kain看看这个http://stackoverflow.com/a/16735184/1552587 – Titus

+0

我理解它不知何故谢谢 –