将数字转换为相应的字母

时间:2016-11-09 00:15:48

标签: javascript

function numObj(s){
  var emptyObj = {};
    s.forEach(function(num) {
      emptyObj[num] = String.fromCharCode(num);
   }); 
  return emptyObj;
}
console.log(numObj([118,117,120]));

我正在编写此函数以将int转换为字母表中对应的char。然而, 我期待作为输出{'118': 'v', '117': 'u', '120': 'x' },但当我运行代码时,我得到:{ '117': 'u', '118': 'v', '120': 'x' }。有没有人有任何解释为什么函数改变输入的顺序?

3 个答案:

答案 0 :(得分:1)

请参阅Does JavaScript Guarantee Object Property Order?Nailing object property order

使用Map()



function numObj(s){
  let emptyObj = new Map();
    s.forEach(function(num) {
      emptyObj.set(num, {[num]:String.fromCharCode(num)});
   }); 
  return emptyObj;
}
let obj = numObj([118,117,120]);

for (let [key, value] of obj.entries()) {
  console.log(key, value)
}




Array()来存储对象



function numObj(s){
  let emptyObj = Array.from({length:s.length});
    s.forEach(function(num, i) {
      emptyObj[i] = {[num]:String.fromCharCode(num)};
   }); 
  return emptyObj;
}
let obj = numObj([118,117,120]);

for (let [key, value] of obj.entries()) {
  console.log(key, value)
}




答案 1 :(得分:0)

您将其指定为对象的属性(甚至是动态属性)。因此JS在内部对其进行排序。相反,我建议你使用JS数组及其推送功能。

答案 2 :(得分:0)

您无法保证JavaScript对象上属性的顺序。除了Map()并使用数组之外,如果您希望此对象知道输入的字符代码数组的原始顺序,则可以添加order属性。通过在对象上创建预期顺序的引用,您可以在执行诸如打印值之类的操作时使用它。

function numObj(s){
  var emptyObj = {};
  emptyObj.order = [];
  s.forEach(function(num) {
    emptyObj[num] = String.fromCharCode(num);
    emptyObj.order.push(num);
  });

  return emptyObj;
}

var obj = numObj([118,117,120]);

obj.order.forEach(function(i){
  console.log(i + " : " + obj[i]);
});