处理复杂的javascript对象

时间:2018-04-26 07:05:28

标签: javascript jquery

您好我有1个这样的对象:

var obj = {
    "00a9": ["\u00A9", ["copyright"]],
    "00ae": ["\u00AE", ["registered"]],
    "203c": ["\u203C", ["bangbang"]],
    "2049": ["\u2049", ["interrobang"]]
}

我想用这个做一个简单的对象

var obj = {
"\u00A9":"copyright",
"\u00AE":"registered"
}

这样我就可以在不使用复杂对象的情况下轻松获取键和值。

目的:如果我像@ u00A9这样的键,或者如果我的价值与版权一样得到\ ua00A9,我想获得版权。

所以我现在尝试的是制作两个对象:

$(obj).each(function(key,val){
    unicodeToImg[val[0]] = val[1][0];
    imgToUnicode[val[1][0]] = val[0];
});

但这将只返回键0及其中的所有值,当我尝试下面的代码时:

$(obj).each(function(key,val){
    $(val).each(function(k,v){
        console.log(k);
        console.log(v);
    });
    //unicodeToImg[val[0]] = val[1][0];
    //imgToUnicode[val[1][0]] = val[0];
});

它返回相同的

3 个答案:

答案 0 :(得分:1)

使用Object.values获取对象值(丢弃初始密钥),然后将奇怪格式化的内部嵌套数组转换为reduce的易于访问的对象:

var obj = {
    "00a9": ["\u00A9", ["copyright"]],
    "00ae": ["\u00AE", ["registered"]],
    "203c": ["\u203C", ["bangbang"]],
    "2049": ["\u2049", ["interrobang"]]
}
const transformedObj = Object.values(obj)
  .reduce((accum, [key, [val]]) => {
    accum[key] = val;
    return accum;
  }, {});
console.log(transformedObj);
console.log(transformedObj['\u00A9']);

不需要jQuery来实现这个目标

答案 1 :(得分:0)

使用Object.valuesreduce一次完成两次查询。

var obj = {
    "00a9": ["\u00A9", ["copyright"]],
    "00ae": ["\u00AE", ["registered"]],
    "203c": ["\u203C", ["bangbang"]],
    "2049": ["\u2049", ["interrobang"]]
}

var result = Object.values(obj).reduce(function(acc,c){
    acc.unicodeToImg[c[0]] = c[1][0];
    acc.imgToUnicode[c[1][0]] = c[0];
    return acc;
},{unicodeToImg:{},imgToUnicode:{}});

console.log(result);

答案 2 :(得分:0)

var obj = {
  '00a9': ['\u00A9', ['copyright']],
  '00ae': ['\u00AE', ['registered']],
  '203c': ['\u203C', ['bangbang']],
  2049: ['\u2049', ['interrobang']],
};

let finalObj = {};
const transform = (obj) => {
  for (let key in obj) {
    finalObj[obj[key][0]] = obj[key][1][0];
  }
};
transform(obj);

console.log(finalObj);
console.log(finalObj['\u00A9']);