试图从对象值中获取排序数组

时间:2017-07-05 14:33:34

标签: javascript

基本上我试图复制此页面上的第一个答案(Sorting object properties based on value),并将我的对象排序为数组。但我收到此错误消息:

  

TypeError:无法将undefined或null转换为object

有什么问题?



  const denom = {
  'ONE HUNDRED': 100.00,
  'TWENTY' : 20.00,
  'TEN' : 10.00,
  'FIVE': 5.00,
  'ONE' : 1.00,
  'QUARTER': 0.25,
  'DIME': 0.10,
  'NICKEL': 0.05,
  'PENNY': 0.01
  };
  
  const denomSorted = Object.keys(denom[0]).sort((a, b) => denom[0][b] - denom[0][a]);
  
denomSorted.forEach(x => console.log(x + ': ' + denom[0][x]));

  
  




2 个答案:

答案 0 :(得分:1)

你缺少那些[]括号。



  const denom = [{
  'ONE HUNDRED': 100.00,
  'TWENTY' : 20.00,
  'TEN' : 10.00,
  'FIVE': 5.00,
  'ONE' : 1.00,
  'QUARTER': 0.25,
  'DIME': 0.10,
  'NICKEL': 0.05,
  'PENNY': 0.01
  }];
  
  const denomSorted = Object.keys(denom[0]).sort((a, b) => denom[0][b] - denom[0][a]);
  
denomSorted.forEach(x => console.log(x + ': ' + denom[0][x]));

  
  




答案 1 :(得分:1)

原因denom [0]未定义

Object.keys(denom[0])

会失败。可以做Object.keys(denom),然后按键排序:

const denom = {
  'ONE HUNDRED': 100.00,
  'TWENTY' : 20.00,
  'TEN' : 10.00,
  'FIVE': 5.00,
  'ONE' : 1.00,
  'QUARTER': 0.25,
  'DIME': 0.10,
  'NICKEL': 0.05,
  'PENNY': 0.01
  };
  
  const denomSorted = Object.keys(denom).sort((a, b) => a.localeCompare(b));
  
denomSorted.forEach(x => console.log(x + ': ' + denom[x]));

或在值之后:

    const denom = {      
    'ONE HUNDRED': 100.00,
      'TWENTY' : 20.00,
      'TEN' : 10.00,
      'FIVE': 5.00,
      'ONE' : 1.00,
      'QUARTER': 0.25,
      'DIME': 0.10,
      'NICKEL': 0.05,
      'PENNY': 0.01
      };
      
      const denomSorted = Object.keys(denom).sort((a, b) => denom[a]- denom[b]);
      
    denomSorted.forEach(x => console.log(x + ': ' + denom[x]));