Javascript 将对象键转到数组索引并返回一个新数组

Javascript 将对象键转到数组索引并返回一个新数组,javascript,arrays,Javascript,Arrays,我试图解决这个问题,我有一个包含键值对的对象,并寻找一种方法将每个键分配给一个特定的索引并返回一个新数组。 请注意:当找不到键时,索引应分配给0,因为它从1到12开始,而不是索引0 var obj = { 4: 7, 6: 8, 7: 6, 8: 8, 9: 3, 10: 6, 11: 4, 12: 3 }; 结果将是: var output = [0, 0, 0, 7, 0, 8, 6, 8, 3, 6, 4, 3]; 感谢您的帮助。您可以在对象中获取最大关

我试图解决这个问题,我有一个包含键值对的对象,并寻找一种方法将每个键分配给一个特定的索引并返回一个新数组。 请注意:当找不到键时,索引应分配给0,因为它从1到12开始,而不是索引0

var obj = {
  4: 7,
  6: 8,
  7: 6,
  8: 8,
  9: 3,
  10: 6,
  11: 4,
  12: 3
};
结果将是:

var output = [0, 0, 0, 7, 0, 8, 6, 8, 3, 6, 4, 3];

感谢您的帮助。

您可以在对象中获取最大关键点,然后使用创建一个长度等于最大关键点的数组。对于
Array.from()
,您可以提供一个映射函数,用于从对象填充数组:

const obj={4:7,6:8,7:6,8:8,9:3,10:6,11:4,12:3};
const length=Math.max(…Object.keys(obj));
const res=Array.from({length},(u,i)=>obj[i+1]| | 0);
控制台日志(res)
。作为控制台包装{max height:100%!important;}/*忽略*/
联机运行此操作:


您可以使用
Array.prototype.map
实现它。更多关于
var obj={
4: 7,
6: 8,
7: 6,
8: 8,
9: 3,
10: 6,
11: 4,
12: 3
};
设a=[];
Object.keys(obj.map)(val=>a[val-1]=obj[val]);
a=数组。从(a,i=>i | | 0);

控制台日志(a)您可以使用以下方法实现此目的:

说明:

  • 创建一个包含12个元素的新数组
  • 用0填充它
  • map
    -对于数组中的每个元素,使用
    index+1
    obj
    中获取值(如您所说,您的对象具有基于1的键,而不是基于0的键)
  • 或者,如果这些密钥不存在,只需返回原始密钥(即0)

  • 这很有效。我不太明白这行[…数组(maxIndex+1).keys()]是如何工作的。你能给我解释更多的细节吗?感谢您的帮助。[…数组(maxIndex+1).keys()]=[0,1,2,3,4,5,6,7,8,9,10,11,12],只需在runkit url中尝试即可查看结果。
    let keys = Object.keys(obj);
    let maxIndex = Math.max(...keys);
    let output = [];
    [...Array(maxIndex + 1).keys()].forEach( i => 
        output.push(keys.includes("" + i)? obj[i] : 0) 
    });
    
    const obj = {
      4: 7,
      6: 8,
      7: 6,
      8: 8,
      9: 3,
      10: 6,
      11: 4,
      12: 3
    };
    
    const output = new Array(12).fill(0).map( (cur, index) => obj[index + 1] || cur)