有没有办法将 JS 对象转换为数组,其中每个键都是数组的索引,填充占位符?
例如,如果你有类似的东西
var obj = {0: 'asdf', 2: 'zxcv'}
我想出去像
['asdf', null, 'zxcv']
我尝试_.toArray(obj)
使用 Lo-Dash 但这只是返回['asdf', 'zxcv']
有没有办法将 JS 对象转换为数组,其中每个键都是数组的索引,填充占位符?
例如,如果你有类似的东西
var obj = {0: 'asdf', 2: 'zxcv'}
我想出去像
['asdf', null, 'zxcv']
我尝试_.toArray(obj)
使用 Lo-Dash 但这只是返回['asdf', 'zxcv']
你可以像这样实现你想要的:
var obj = {0: 'asdf', 2: 'zxcv'}
var array =[];
for (var key in obj) {
array[key]=obj[key]
}
这个数组的长度是 3 并且包含这个:
Array : ["asdf", undefined × 1, "zxcv"]
主要问题是找到未来数组的长度。只要对象只有字符串形式的数字键,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);