1

有没有办法将 JS 对象转换为数组,其中每个键都是数组的索引,填充占位符?

例如,如果你有类似的东西

var obj = {0: 'asdf', 2: 'zxcv'}

我想出去像

['asdf', null, 'zxcv']

我尝试_.toArray(obj)使用 Lo-Dash 但这只是返回['asdf', 'zxcv']

4

2 回答 2

0

你可以像这样实现你想要的:

var obj = {0: 'asdf', 2: 'zxcv'}
var array =[];
for (var key in obj) {
     array[key]=obj[key]
}

这个数组的长度是 3 并且包含这个:

Array : ["asdf", undefined × 1, "zxcv"]
于 2013-12-16T16:57:58.267 回答
0

主要问题是找到未来数组的长度。只要对象只有字符串形式的数字键,Math.max.apply(Math, Object.keys(obj)) + 1就应该这样做。

const obj = {0: 'asdf', 2: 'zxcv', 50: 'hgfd', 300: 'jkhf' };

console.log(Math.max.apply(Math, Object.keys(obj)) + 1);

如果我们知道长度,我们可以使用@dandavis 方法:

const obj = {0: 'asdf', 2: 'zxcv', 10: 'hgfd' };

const result = [].slice.call(Object.assign({ 
  length: Math.max.apply(Math, Object.keys(obj)) + 1}, obj));

console.log(result);

如果你想null代替undefined你可以使用Array.from()

const obj = {0: 'asdf', 2: 'zxcv', 10: 'hgfd' };

const result = Array.from({
  length: Math.max.apply(Math, Object.keys(obj)) + 1
}, (v, k) => obj.hasOwnProperty(k) ? obj[k] : null);

console.log(result);

于 2016-11-04T21:32:46.433 回答