使用for循环访问对象属性名称

时间:2017-04-18 19:08:04

标签: javascript github ecmascript-6 github-api

我正在开发基于JavaScript& amp;的表情符号系统。 Github Emoji图标,我使用一个函数来触发打字事件,这是我的代码

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;
}

它运作良好,但并不聪明。

我尝试使用带for循环的数组来处理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循环访问object属性但不显示它的名称,我需要替换属性名,我期望的最终代码是:

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

2 个答案:

答案 0 :(得分:2)

试试这个:

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

当您使用for(var i in data)循环i时,对象属性不是data[i]

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

答案 1 :(得分:1)

为了完整性,更好的方法可能是避免循环并利用.replace的能力来获取回调函数:

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]; });