Daily-Interview-Question
                                
                                 Daily-Interview-Question copied to clipboard
                                
                                    Daily-Interview-Question copied to clipboard
                            
                            
                            
                        第 55 题:某公司 1 到 12 月份的销售额存在一个对象里面
let obj = {1:222, 2:123, 5:888};
obj.length = 12;
let _obj = Array.from(obj).slice(1);
let newObj =  _obj.map((item) => {if(item === undefined) {return null;} else {return item;}});
console.log(newObj);
let obj = {1:222, 2:123, 5:888};
obj.length = 12;
obj[Symbol.iterator] = Array.prototype[Symbol.iterator];
let _obj = [...obj].slice(1);
let newObj =  _obj.map((item) => {if(item === undefined) {return null;} else {return item;}});
console.log(newObj);
思考:
let _obj = [].slice.call(obj);
let obj = {1:222, 2:123, 5:888};
const result = Array.from({ length: 12 }).map((_, index) => obj[index + 1] || null);
console.log(result)
let data = {1:222, 2:123, 5:888};
let arr = Array.from({length:12}).map((it,i)=> data[i+1]||null);
console.log(arr)
let data = {1:222, 2:123, 5:888};
let arr = Array.from({length:12}).fill(null);
keys(data).forEach(it=>arr[it-1] = data[it]);
console.log(arr);
console.time();
let data = {1:222, 2:123, 5:888};
let arr = Array.from({length:12}).map((it,i)=> data[i+1]||null);
console.log(arr);
// default: 2.119873046875ms
console.timeEnd();
console.time()
let obj = {1:222, 2:123, 5:888};
let res = Array.from({length:12}).fill(null);
keys(obj).forEach(it=>res[it-1] = obj[it]);
console.log(arr);
// default: 0.7451171875ms
console.timeEnd();
Array.from({length:12},(v,i)=>({1:222,2:123,5:888}[i+1])||null)
let obj = {1:222, 2:123, 5:888};
Array.from({length:12},(item,index)=>obj[index+1]||null)
function arrToObject(obj) { let arr = []; for (let i = 0; i < 12; i++) { arr.push(null) for (let key in obj) { if(key == (i+1)){ arr.splice(i, 1, obj[key]) } } } return arr; }; let obj = {1:222, 2:123, 5:888};
怎么感觉我这好low啊!!
var obj = {1:222, 2:123, 5:888}
var c = new Array(12).fill(true).reduce((prev, cur, key) => { prev[key] = obj[key + 1] || null return prev }, [])
// 1-12月份的销售额; var obj = { 1: 222, 2: 123, 5: 888, } var arr = new Array(12).fill(null); var finalArr = arr.map((v, i, curr) => { if (obj[i + 1]) { return obj[i + 1]; } else { return null; } }); console.log('--log--:', finalArr)
Array.from(Object.assign(obj,{length:12}),v=>v===undefined?null:v)
var obj = { 1: 222, 2: 123, 5: 888 }; let arr = []; for(var i = 1; i <= 12; i++) { if(obj[i]) { arr.push(obj[i]) } else { arr.push(null) } } console.log(arr) //[222, 123, null, null, 888, null, null, null, null, null, null, null]
var obj = {1:222, 2:123, 5:888};
obj.length = 13;
Array.from(obj,it=>it||null).slice(1);
let data = { 1:222, 2:123, 5:888 }
const arr = new Array(12).fill(null).map((item, i) => data[i + 1] || item)
console.log('arr---------', arr)
const obj = {1:222, 2:123, 5:888}
const arr = Array.from({length: 12}, (_, index) => (index + 1) in obj ? obj[index + 1] : null)
console.log(arr)
let obj=Object.assign({1:null,2:null,3:null,4:null,5:null,6:null,7:null,8:null,9:null,10:null,11:null,12:null},{1:222,2:123,5:888}) attr=Object.values(obj) console.log(attr);
for循环是最快的。。
var obj = {1:222, 2:123, 5:888}
function hander(obj){
    let arr = [];
  console.time()
    for (let i = 1;i<=12;i++) {
        if(obj[i]){
            arr.push(obj[i])
        }else{
            arr.push(null)
        }
    }
    console.log(arr) // [222, 123, null, null, 888, null, null, null, null, null, null, null]
    console.timeEnd() //default: 0.4609375ms
}
const obj = {1:222, 2:123, 5:888}; const result = Array.from({length:12},(item,index)=>(obj[index+1]?obj[index+1]:null)); console.log(result)
function formatData (data) { let result = [] for (var i = 0; i < 12; i++) { result[i] = null } let keys = Object.keys(data) keys.forEach(o => { result[parseInt(o) - 1] = data[o] })
return result }
var data = { 1: 222, 2: 123, 5: 888 } formatData(data)
let obj = {1:222, 2:123, 5:888}
let arr = Array.from({length:12},(v,i) => obj[i+1] || null )
 let obj = {1:222,2:123,5:888};
 let arr = Array.from({length:12}).map((item,i) => obj[i+1]||'null');
 console.log(arr);
//  222,123,null,null,888,null,null,null,null,null,null,null
Array.from({length:12})创建一个12个空位的数组
.map()将obj中的每一项赋值给数组
Array.from({1: 222, 2: 123, 5: 888, length: 13}).slice(1).map((v, i) => v || null)
没用es6数组好low
/**
  * convert
  * @param {*} param 转换的12个月销售额 对象
  */
//  第 55 题:某公司 1 到 12 月份的销售额存在一个对象里面,如下:{1:222, 2:123, 5:888},请把数据处理为如下结构:[222, 123, null, null, 888, null, null, null, null, null, null, null]。
function convert(param) {
  if (typeof param === 'object' && param) {
    let arr = new Array(13);
    for (let index = 0; index < arr.length; index++) {
      let e = param[key] : null;
      arr[index] = e;
    }
    return arr.slice(1);
  } else {
    console.warn('输入不合理!');
    return;
  }
}
const obj = { 1: 222, 2: 123, 5: 888 };
let convertArr = convert(obj);
console.log(convertArr);
let data = {1:222, 2:123, 5: 888}
let r = Array(12).fill(null)
r.forEach((v, i, arr) => {
    data[i] && (arr[i - 1] = data[i])
})
console.log(r)
   const obj = { 1: 222, 2: 123, 5: 888 }
    const vali = (options) => {
        if (Object.prototype.toString.call(options) !== '[object Object]') {
            console.log('请传入对象')
            return false
        }
        return true
    }
    const getSale = (options) => {
        if (!vali(options)) {
            return
        }
        let arr = new Array(13)
        for (let i = 0; i < arr.length; i++) {
            arr[i] = null
            Object.keys(options).forEach(it => {
                if (parseInt(it) === i) {
                    arr[i] = options[it]
                }
            })
        }
        arr.shift()
        return arr
    }
    console.log(getSale(obj))
    // ES6
    const objToArr = (options) => {
        if (!vali(options)) {
            return
        }
        options = { ...options, length: 13 }
        let arr = Array.from(options);
        arr.shift()
        arr = arr.map(item => {
            if (item === undefined) {
                return item = null
            } else {
                return item
            }
        })
        return arr
    }
    console.log(objToArr(obj))
写的好low
    let result = Object.entries({ 1: 222, 2: 123, 5: 888 }).reduce(
        (prev, [key, value]) => { prev[key - 1] = value; return prev; },
        Array.from( { length: 12 }, (_) => null )
    );
    console.log(result);
  Object.assign(Array(13).fill(null),{1:222, 2:123, 5:888}).slice(1)
function newData(obj){ obj.length = 12 let newObj = Array.from(obj).map((item,index) =>obj[index+1] || null) return newObj; } console.log(newData({1:222, 2:123, 5:888}))
var format = function(sales) { var arr = new Array(12).fill(null); for (const month in sales) arr[month - 1] = sales[month]; return arr; }
function objectToArray(object) {
var arr=new Array(12).fill(null)
var newArr=arr.map((x,index) => {
if(object[index+1]){
return object[index+1]
}else{
return null
}
})
return newArr
}
回答好踊跃,贴上自己的,其实使用的方法在上边都已经有了。感觉不同的方法的区别就是会使用到不同数量的新生成数组,另外代码量也不同,可以根据个人口味选择。
const DATA = {1: 500, 3: 800, 5: 2000};
// const TARGET = [500, null, 800, null, 2000, null, null, null, null, null, null, null];
/** create three arrays */
const transformObjToArrayES6SliceMap = (obj) => Array.from(Object.assign({}, obj, { length: 13 })).slice(1).map((item) => item || null);
/** create one array */
const transformObjToArrayES6ForEach = (obj) => { 
       const arr = Array.from({ length: 12 }); 
       arr.forEach((item, index, arr) => { arr[index] = obj[index+1] || null;}); 
       return arr;
};
/** create two arrays */
const transformObjToArrayES6Map = (obj) => Array.from({ length: 12 }).map((item, index) => obj[index+1] || null);
/** create one array */
const transformObjToArrayFor = (obj) => {
	let arr = [];
	for (let i=0; i < 12; i++) {
		arr[i] = obj[i+1] || null;
	}
	return arr;
};
一直比较喜欢简洁的代码
const obj = { 1: 222, 2: 123, 5: 888 };
const result = Array.from({ ...obj, length: 13 }, item => item || null).slice(1);
console.log(result);
function formatData(data) {
	var length = 12;
	var dav = Object.keys(data);
	var newData = [];
	for(let i = 1;i<12;i++){
		newData.push(dav.includes(`${i}`) ? data[i] : null)
	}
	return newData;
}
        let salePrice = {1:222, 2:123, 5:888}
        let result = Array.from({length:12}, (item,index) => {
            item =  salePrice[index+1] || null
        	return item
         });
        console.log(result)
const obj = { 1: 222, 2: 123, 5: 888 }; const result = Array(12).fill(null).map((item, i) => obj[i + 1] || null);
好像都差不多。。。
var obj = {
1:222,
2:123,
5:888
}
obj.length=12;
for(var i=0;i<obj.length;i++){
if(obj[i] == undefined){
obj[i]=null;
}
}
var arr = [];
arr = Array.prototype.slice.call(obj,0);
console.log(arr);
//还不会es6,思路是把obj变成类数组
let obj = {1:222, 2:123, 5:888};
[...Array(12)].map((item, index) => obj[index + 1] || null);
const obj = {1:222, 2:123, 5:888}
const result = Array.from(Object.assign({length: 13}, obj)).slice(1).map(r => r || null)
Array-Like. An object has length property.
最简短,apply+伪数组
Array.apply(null, {1:222, 2:123, 5:888, length: 12}).map(x => typeof x === 'number' ? x : null)
Array.from({length: 12}).map((item, index) => data[index] || null);
const data = { 1: 222, 2: 123, 5: 888, 8: 0 };
[...Array(12)].map((_, idx) => typeof data[idx + 1] === 'undefined' ? null : data[idx + 1]);
最简短,apply+伪数组
Array.apply(null, {1:222, 2:123, 5:888, length: 12}).map(x => typeof x === 'number' ? x : null)
思路非常棒,就是结果不对 :joy:,无法与月份一 一对应,续貂调整:
Array.apply(null, {1:222, 2:123, 5:888, length: 12 + 1}).map(x => typeof x === 'undefined' ? null : x).slice(1)
const obj = {1:222, 2:123, 5:888};
const newArr = Array(12).fill(null).map((v, i) => obj[i + 1]  ||  v);
console.log(newArr);  // [222, 123, null, null, 888, null, null, null, null, null, null, null]
const parseData = (data) => {
let result = []
for (let i = 1; i < 12; i += 1) {
if (data[${i}]) {
result.push(data[${i}])
} else {
result.push(null)
}
}
return result
}
const data = {1:222, 2:123, 5:888};
const format = data => {
  return [...Array(12)].map((i,j) => data[j+1]===undefined?null:data[j+1])
}
format(data)
var obj = { 1: 222, 2: 123, 5: 888 }; var arr=new Array(12).fill(null); for (let key in obj) { if (obj.hasOwnProperty(key)) { arr.fill(obj[key],key-1,key) } }
test({1: 222, 2: 123, 5: 888});
function test(ob) {
    var res = [];
    for (var i = 0; i < 12; i++) {
        ob[i + 1] ? res.push(ob[i + 1]) : res.push(null);
    }
    return res;
}
const obj = {1:222, 2:123, 5:888}
console.log([...Array(13).keys()].slice(1).map(e=>obj[e]||null))
const data = {1: 222, 2: 123, 5: 888, 6: 0}
Array.from({length: 12}).map((item, index) => data[index+1] === undefined ? null :  data[index+1])
const obj = {1:222, 2:123, 5:888} console.log([...Array(13).keys()].slice(1).map(e=>obj[e]||null))
这个要考虑const obj = {1: 0, 2: 100, 8: 80}
Array.from({length:12},(x,i)=>a.hasOwnProperty(i+1)?a[i+1]:null)
var obj = {1:222, 2:123, 5:888} Array.from({ length: 12 }).map((item, index) => { return obj[index + 1] || null })
let obj = {1:222, 2:123, 5:888}; obj.length = 12; let _obj = Array.from(obj).slice(1); let newObj = _obj.map((item) => {if(item === undefined) {return null;} else {return item;}}); console.log(newObj);let obj = {1:222, 2:123, 5:888}; obj.length = 12; obj[Symbol.iterator] = Array.prototype[Symbol.iterator]; let _obj = [...obj].slice(1); let newObj = _obj.map((item) => {if(item === undefined) {return null;} else {return item;}}); console.log(newObj);思考:
let _obj = [].slice.call(obj);
obj.length = 12 这里的length应当为13
let obj = {1:222, 2:123, 5:888} console.log(Array.from({length: 12}, (_, index) => obj[index+1] || null))
var obj = {1:222, 2:123, 5:888}
var arr = new Array(12).fill(null)
for(key in obj){
    arr[key-1] = obj[key]
}
arr   // [222, 123, null, null, 888, null, null, null, null, null, null, null]
或者
arr.map(function(item,index){
    return item = obj[index + 1] || null
})    // [222, 123, null, null, 888, null, null, null, null, null, null, null]
let obj = {1:222,2:123, 5: 888};
let arr = Array(12).fill(null);
arr.forEach((item, index)=> {
    if(obj.hasOwnProperty(index+1)){
        arr[index] = obj[index+1];
    }
} )
console.log(arr);
var obj= {1:222, 2:123, 5:888}; var arr = []; arr.length = 12; for( var i in obj ) { arr[i-1] = obj[i] } console.log(arr);
const o={1:222, 2:123, 5:888};
o.length=13;
Array.from(o).slice(1).map(v=>v||null)
function arrToObject(obj) { let arr = []; for (let i = 0; i < 12; i++) { arr.push(null) for (let key in obj) { if(key == (i+1)){ arr.splice(i, 1, obj[key]) } } } return arr; }; let obj = {1:222, 2:123, 5:888};
怎么感觉我这好low啊!!
Just a feel yet? U must be believe yourself, you are right, it lowest!
let obj = { 1: 222, 2: 123, 5: 888 };
let arr = [...Array(12).keys()].map(item => obj[item + 1] || null);
console.log(arr);
第一种写法
var obj = {1:222, 2:123, 5:888}
var arr = Array.from({length:12},(_,index) => {
 return obj[index + 1]|| null
})
第二种写法
var arr = new Array(12).fill(null).map((item,index) => {
  return obj[index + 1]|| null
})
我想法这样。。。
let obj = {1:222, 2:123, 5:888};
obj.length = 13;
Array.apply(null,Array.prototype.slice.call(obj).slice(1)).map((item)=>item||null)
var obj = {1:222, 2:123, 5:888}; var newObj = {}; Object.keys(obj).forEach((key)=>{ var newKey = String(key); newObj[newKey] = obj[key]; }) newObj.length =10; console.log([].slice.call(newObj))
let a = new Array(12).fill(null) Object.entries({1:222, 2:123, 5:888}).forEach( item=>{ a[item[0]-1] = item[1] } )
let arr = Array.from({1:222, 2:123, 5:888,length:13},a=>a?a:null) arr.shift()
@wangming-0215 Array.from第二个参数和map一样的 let obj = {1:222, 2:123, 5:888}; const result = Array.from({ length: 12 }, (_, index) => obj[index + 1] || null); console.log(result)
let a = {1:222, 2:123, 5:888} let b = [] for (var i = 1; i < 13 ;i++) { if(a[i] !== undefined) { b.push(a[i]) } else { b.push(null) } }
let obj = {1:222, 2:123, 5:888};
let arr = new Array(12).fill(null)
arr.map((item,i) => {
	Object.keys(obj).map(item => {
		if(i == item){
			arr[i] = obj[item]
		}
	})
})
console.log(arr)
借用了一下下46题的思路
let obj = {1: 222, 2: 333, 5: 888};
obj.length = 12;
obj.splice =  Array.prototype.splice
let newarr = Array.from(obj).map(item => typeof item == 'undefined' ? 'null': item)
console.log(newarr)
let obj = {1: 222, 2: 123, 5: 888};
let res = [...Array(12)].map((_, index) => obj[index+1] || null)
console.log(res)
function trans() {
  const arr = [];
  for (let i = 1; i < 12; i++) {
    arr.push(obj[i] || null);
  }
  return arr;
}
let obj = {1: 222, 2: 123, 5: 888}
let res = Array.from({length: 12}, (v, index) => obj[index + 1] || null)
console.log(res)
const obj = {1:222, 2:123, 5:888};
const arr = [];
for(let i =1; i<13;i++){
	if(obj[i]){
		arr.push(obj[i]);
	}else {
		arr.push(null);
	}
}
console.log(arr);
const format = (tar = {}, size = 12) => Array.from({ length: size }, (v, i) => (tar[i + 1] || null )); format({1:222, 2:123, 5:888})
const data = { '1':222, '2':123, '5':888 }
const dataList = [];
for (let i = 1; i <= 12; i++) {
    if (data.hasOwnProperty(i)) {
        dataList.push(data[i]);
    } else {
        dataList.push(null);
    }
}
console.log(dataList);
简单的写一下
let a = {1:222, 2:123, 5:888}
function f(obj) { obj.length = 13 let arr = Array.from(obj) arr.shift() return arr.map(item => item ? item : null) }
f(a) // [ 222, 123, null, null, 888, null, null, null, null, null, null, null ]
let data = new Array(12).fill(null) let obj = {1:222, 2:123, 5:888} for (let key of Object.keys(obj)) { data[key] = obj[key] } console.log(data)
'111111111111'.split('').map((item, index) => { return { 1: 222, 2: 123, 5: 888 } [index + 1] || null
})
Array.from({length:12},(_,i)=>{ return boj[i+1] || null })
const obj = {1:222, 2:123, 5:888}   
obj.length = 13   
const array = Array.from(obj).map((item)=> item||null).slice(1,obj.length)   
console.log(array)   
这样写比较好理解吧 let obj = {1:222, 2:123, 5:888}; let arr=[] for(let i=0;i<=11;i++){ arr[i]=obj[i+1]||null }
let str = { 1: 222, 2: 123, 5:888 }; Array.apply(null, {length: 12}).map((ele,index) => {return str[index+1] ? str[index+1] : null}) ---> [222, 123, null, null, 888, null, null, null, null, null, null, null]
 let mobj = { 6: 222, 4: 333, 12: 555, 1: 22 }
 let newArr = []
    for (let i = 0; i < 12; i++) {
      let res = mobj[i + 1]
      newArr.push(res || 'null')
    }
    console.log(newArr)

let obj = { 1:222,2:123,5:888}; var tg = []; for(var i = 0; i < 12; i++) { tg.push(obj[i+1] ? obj[i+1] :'null') } console.log(tg) 首先想到的就是push+for循环
 let obj = {1:222, 2:123, 5:888};
    let arr=Array.from({length:12}).fill(undefined);
    for(let [key,value] of Object.entries(obj)){
        arr[key-1] = value;
 }
function arr(obj = {1:222, 2:123, 5:888}) {
	let result = []
	for (let i = 0; i < 12; i ++) {
		if (obj[i]) {
			result[i] = obj[i]
		} else {
			result[i] = null
		}
	}
	return result
}
你们这些花里胡哨的,全都没我快哈哈哈
var a={1:222, 2:123, 5:888}; var b=Array.from({length:12}).map((_,index)=>a[index+1]||null); console.log(b)
 // 朴素的
  function getSalary(obj) {
      let res = []
      for(let i = 1; i <= 12; i++) {
        res.push(obj[i] || null)
      }
      return res
    }
 // 学习一下别人的
 Array.from({length: 12}).map((_, index) => obj[index+1] || null)
Array.from({length:12}).map((v,i)=>({1:11,2:123,5:888}[i+1] || null))
function get12(obj) { var arr = Array(12).fill(null) for (let item in obj) { arr[Number(item) - 1] = obj[item] } return arr } get12({ 1: 222, 2: 123, 5: 888 })
var obj={1:222, 2:123, 5:888} var arr=[] for(var j =0;j<12;j++){ obj[j+1]?arr[j]=obj[j+1]:arr[j]=null }
Object.keys([...Array(12)]).map(index => data[index - -1] || null)
// Array.from()可以将各种值转为真正的数组,并且还提供map功能。
// 这实际上意味着,只要有一个原始的数据结构,你就可以先对它的值进行处理,然后转成规范的数组结构,进而就可以使用数量众多的数组方法。
let obj = {1:222, 2:123, 5:888};
Array.from({length: 12}, (item, index) => {
  return obj[index + 1] || null
})
// 等价下面👇
let obj = {1:222, 2:123, 5:888};
Array.from({length: 12}).map((item, index) => obj[index + 1] || null);
// 一般思路
let obj = {1:222, 2:123, 5:888};
let arr = new Array(12).fill(null);
let keys = Object.keys(obj); // 此处是字符串数组
keys.map((item, index) => {
  arr[item - 1] = obj[item] 
})
简单就完事儿了:
let obj = { 1: 222, 2: 133, 5: 888 };
let res = [];
for (let i = 1; i <= 12; i++) {
  obj[i] ? res.push(obj[i]) : res.push(null);
}
console.log(res);
简单就完事儿了:
let obj = { 1: 222, 2: 133, 5: 888 }; let res = []; for (let i = 1; i <= 12; i++) { obj[i] ? res.push(obj[i]) : res.push(null); } console.log(res);
简单应该是这样的 result = Array.from(Array(12), (item, index) => obj[index + 1] || null)
let data = { 1: 222, 2: 123, 5: 888 } let arrary = [] for (let i = 1; i <= 12; i++) { arrary.push(data[i] || 'null') } console.log(arrary)
emmmmm low了点
const saleList = obj => {
  const saleListofYear =  new Array(12).fill(null)
  for (const key in obj) {
    saleListofYear[key - 1] = obj[key]
  }
  return saleListofYear
}
var test={1:222,2:123,5:888}; test.length=13; console.log(Array.from(test).map(item=>(typeof item==='undefined')?null:item).slice(1)) //[222, 123, null, null, 888, null, null, null, null, null, null, null]
function objToArr(obj) {
    const arr = new Array(12).fill(null)
    for(let key in obj) {
        arr[key - 1] = obj[key]
    }
    return arr
}
骚操作的确很多,但我觉得代码可读性和可维护性也很重要吧?假如obj的范围是100W,但它只有1个元素,我们还傻乎乎地去遍历数组的每个元素么。。。
const obj = {1:222, 2:123, 5:888} let arr = Array(12) for (let i in obj) { arr[i] = obj[i] }
var data = {1:222,2:123,5:888}; [...Array(12).keys()].map(i=>data[i+1] || null)