javascript - 从对象中查找 Unicode 字符

标签 javascript

我有一个包含unicodes的大对象,数据结构如下

var data = {
   "1f1f7-1f1fa":[["\uD83C\uDDF7\uD83C\uDDFA"],"\uE512","\uDBB9\uDCEC",["ru"],28,3],
   "1f1fa-1f1f8":[["\uD83C\uDDFA\uD83C\uDDF8"],"\uE50C","\uDBB9\uDCE6",["us"],28,4]
   ....
   ....
};

我想让它像

var final = {
    "\uD83C\uDDF7\uD83C\uDDFA" : "ru",
    "\uE512" : "ru",
    "\uDBB9\uDCEC" : "ru"
    ...
    ...
}

这是代码和 bin

var final = {};

for(var i in data) {

    var arr = [], spliceI = null;

    arr = data[i];

    arr = arr.filter(function(str){
       return str;
    });

    loop:
    for(var j = 0; j < arr.length; j++){

       if(arr[j] === +arr[j]){
          spliceI = j;
          break loop;
       }
    }

    arr.splice(spliceI, arr.length);

    var vals = arr.splice(-1).pop();

    if(vals == undefined) debugger;

    console.log(vals);

    arr = arr.concat.apply(arr, data[i]);

    for(var k = 0; k < vals.length; k++){
      for(j = 0; j < arr.length; j++){
          final[arr[j]] = vals[k];
      }
    }
}

但出乎意料的是,data[i] 变成了 [],所以我收到错误 Uncaught TypeError: Cannot read property 'length' of undefined for vals 操作。

我该如何解决这个问题,这是针对表情符号的。

最佳答案

查看jsbin,我注意到第一个数据条目是:"00a9": [["\u00A9"], "\uE24E","\uDBBA\uDF29", ["copyright"] , 0, 0]。我们将此条目称为“版权”。

声明

arr = arr.filter(function(str){
   return str;
});

会将 data 的“版权”条目转换为值:[["\u00A9"], "\uE24E","\uDBBA\uDF29", ["copyright"]] 因为 0 值返回 false,导致它们被过滤掉。我认为这个函数的目的是删除未定义的元素,这是我在这个答案中使用的假设。这反过来会导致 spliceI 在标记为“loop:”的循环末尾保持为空,因为循环正在查找数字,并且过滤后的数组中不再包含任何数字。

数据中删除第一个条目删除了错误,确认了这一点。

将您的过滤器代码更新为以下内容:

arr = arr.filter(function (str) {
    return typeof(str) !== 'undefined';
});

然后修复了错误,即使存在第一个数据条目也是如此。这是bin使用更新的代码,在较小的数据集上运行。

关于javascript - 从对象中查找 Unicode 字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25615446/

相关文章:

javascript - 启动按钮以启用和恢复动画,而无需在双击时再次重复该功能(javascript)

javascript - 如何使图像随页面调整大小

javascript - 如何优化Javascript函数

javascript - 根据 bool 值设置样式值

javascript - jquery 替换 '/' - 正则表达式

javascript - 在 React 中过滤特定的表行

javascript - 如何将变量从@Input 传递到 Angular2 组件中的服务>

javascript - 如何选择 .getPropertyValue 返回的单位 ("text-size") ; JS查询

javascript - 页面刷新上的随机标题图像,CSS jquery javascript?

javascript - Chart.JS 自定义 - 如何调试?