Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

第 55 题:某公司 1 到 12 月份的销售额存在一个对象里面 #96

Open
zeroone001 opened this issue Apr 15, 2019 · 151 comments

Comments

@zeroone001
Copy link

zeroone001 commented Apr 15, 2019

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);
@wangming-0215
Copy link

let obj = {1:222, 2:123, 5:888};
const result = Array.from({ length: 12 }).map((_, index) => obj[index + 1] || null);
console.log(result)

@vivvn
Copy link

vivvn commented Apr 16, 2019

let data = {1:222, 2:123, 5:888};
let arr = Array.from({length:12}).map((it,i)=> data[i+1]||null);
console.log(arr)

@vivvn
Copy link

vivvn commented Apr 16, 2019

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);

@vivvn
Copy link

vivvn commented Apr 16, 2019

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();

@Seasonley
Copy link

Seasonley commented Apr 16, 2019

Array.from({length:12},(v,i)=>({1:222,2:123,5:888}[i+1])||null)

@Moriarty02
Copy link

let obj = {1:222, 2:123, 5:888};
Array.from({length:12},(item,index)=>obj[index+1]||null)

@WQHASH
Copy link

WQHASH commented Apr 16, 2019

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啊!!

@MaJiaXuan
Copy link

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
}, [])

@truexin1292
Copy link

// 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)

@Yanhua67
Copy link

Array.from(Object.assign(obj,{length:12}),v=>v===undefined?null:v)

@GuoYuFu123
Copy link

GuoYuFu123 commented Apr 16, 2019

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]

@vivvn
Copy link

vivvn commented Apr 16, 2019

var obj = {1:222, 2:123, 5:888};
obj.length = 13;
Array.from(obj,it=>it||null).slice(1);

@lxinr
Copy link

lxinr commented Apr 16, 2019

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)

@ZodiacSyndicate
Copy link

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)

@NANAYWY
Copy link

NANAYWY commented Apr 16, 2019

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);

@pangqiang
Copy link

pangqiang commented Apr 16, 2019

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
}

@zxcweb
Copy link

zxcweb commented Apr 16, 2019

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)

@zo11o
Copy link

zo11o commented Apr 16, 2019

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)

@lvwxx
Copy link

lvwxx commented Apr 16, 2019

let obj = {1:222, 2:123, 5:888}
let arr = Array.from({length:12},(v,i) => obj[i+1] || null )

@mandyshen97
Copy link

 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中的每一项赋值给数组

@627235655
Copy link

Array.from({1: 222, 2: 123, 5: 888, length: 13}).slice(1).map((v, i) => v || null)

@ZhanghaoH
Copy link

ZhanghaoH commented Apr 16, 2019

没用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);

@bran-nie
Copy link

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)

@xbcc123
Copy link

xbcc123 commented Apr 16, 2019

   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

@BaconZhang
Copy link

BaconZhang commented Apr 16, 2019

    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);

@NANAYWY
Copy link

NANAYWY commented Apr 16, 2019

  Object.assign(Array(13).fill(null),{1:222, 2:123, 5:888}).slice(1)

@baobaoblue
Copy link

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}))

@un-defined
Copy link

un-defined commented Apr 16, 2019

var format = function(sales) {
var arr = new Array(12).fill(null);
for (const month in sales) arr[month - 1] = sales[month];
return arr;
}

@MKLM0222
Copy link

MKLM0222 commented Apr 16, 2019

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
}

@pengcc
Copy link

pengcc commented Apr 16, 2019

回答好踊跃,贴上自己的,其实使用的方法在上边都已经有了。感觉不同的方法的区别就是会使用到不同数量的新生成数组,另外代码量也不同,可以根据个人口味选择。

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;
};

@ysyfff
Copy link

ysyfff commented Dec 23, 2020

let transfer = (obj)=> new Array(12).fill(null).map((item,i)=>(obj[i+1]||item))

transfer({1:222, 2:123, 5:888})

@liyang1994
Copy link

var a = {1:222, 2:123, 5:888}
var b = []
for( var i = 1;i<= 12;i++){
b[i-1] = a[i] ? a[i] : null
}
console.log(b)

@chdongq
Copy link

chdongq commented Jan 19, 2021

let obj = {1:222, 2:123, 5:888};
obj.length=12;
let newObj = Array.from(obj).map((item,index)=>obj[index+1]||null)

@pan-Z2l0aHVi
Copy link

function dataTransform(object) {
  return Array.from(Array(12)).map((item, index) => {
    let result = null
    Object.keys(object).forEach((key) => {
      if (key === String(index + 1)) {
        result = object[key]
      }
    })
    return result
  })
}

@ViolaSong123
Copy link

ViolaSong123 commented Jan 27, 2021

var arr = new Array(12).fill(null),
obj = { 1: 222, 2: 123, 5: 888 };
for (key in obj) {
arr[key-1] = obj[key]
}
console.log(arr)

@orime
Copy link

orime commented Jan 28, 2021

```js
let obj = {1:222, 2:123, 5:888};
const result = Array.from({ length: 12 }).map((_, index) => obj[index + 1] || null);
console.log(result)

如果其中一个月份销售额为0就不行了

let obj = {1:222, 2:123, 5:888, 4: 0};
const result = Array.from({ length: 12 }).map((_, index) => obj[index + 1] || null);
console.log(result)

@manyyuri
Copy link

function toRe(obj) {
  let re = [];
  for (let i = 1; i < 13; i++) {
    // 遍历1-12,出现在给定对象中则赋对应值,否则置为null;
    re[i - 1] = i in obj ? obj[i] : null;
  }
  return re;
}
console.log(toRe({ 1: 222, 2: 123, 5: 888 }));

@Mochalhy
Copy link

const obj = {
1: 222,
2: 123,
5: 888
};
const newArr = [...new Array(12)].map((item, index) => obj.hasOwnProperty(index+1) ? obj[index+1] : null);
image

@peterczg
Copy link

peterczg commented May 4, 2021

Object.assign(new Array(13).fill(null),{1:222, 2:123, 5:888}).slice(1)

@ruanlinxin
Copy link

const data = {1:222, 2:123, 5:888}
const map = new Array(12).fill(null)
console.log(map.map((item,i)=> data[i+1] || item))
```

@zhelingwang
Copy link

let data = { 1: 222, 2: 123, 5: 888 };
let arr = new Array(12).fill(null);
Object.keys(data).forEach(month => {
  arr[month - 1] = data[month];
});
console.log(arr);

@tchen-l
Copy link

tchen-l commented Jun 10, 2021

let obj = {1:222, 2:123, 5:888};
const result = Array.from({ length: 12 }).map((_, index) => obj[index + 1] || null);
console.log(result)

这个 || 要换成 ?? 吧

@Nicholas-Ke
Copy link

let obj = {1:222, 2:123, 5:888};
let arr = new Array(12).fill(null);
for (const [k, v] of Object.entries(obj)) {
arr[k - 1] = v;
}

@dogfeeling
Copy link

const obj = {1:222, 2:123, 5:888}

let res = new Array(12).fill(null).map((item,index)=>(item=obj[index+1] || null,item))

console.log(res);
看了一下你们的代码确实比我简洁,学习了

@xiangfei1
Copy link

 let obj = {
    1:222,
    2:123,
    5:888
}
let arr = new Array(12).fill(null);
for(let i in obj){
 arr.splice(i-1,1,obj[i]);
}
console.log(arr);

@SnailOwO
Copy link

SnailOwO commented Dec 16, 2021

   let obj = {
        1: 222,
        2: 123,
        5: 888,
        length: 12
    }
    Array.from(obj).slice(1).map(item => !item ? null : item)

@rongda
Copy link

rongda commented Dec 16, 2021 via email

@catwatermelon
Copy link

let o = { 1: 222, 2: 123, 5: 888 };
let arr = new Array(12).fill(null);
Object.entries(o).map(([key, value]) => {
arr[key] = value;
})

@ghost
Copy link

ghost commented Dec 27, 2021

let target = {1:222, 2:123, 5:888}
let res = Array(12).fill(null).map((el,index)=>{
el = target[index+1] ? target[index+1] : null
return el
})

@AwangXuan
Copy link

	let sele = { 1: 222, 2: 123, 5: 888 }
	function tansformSele(obj) {
		let res = [null, null, null, null, null, null, null, null, null, null, null, null]
		for (const [key, value] of Object.entries(obj)) {
			res[key - 1] = value
		}
		return res
	}

	sele = tansformSele(sele)
	console.log("结果:", sele); // (12) [222, 123, null, null, 888, null, null, null, null, null, null, null]

@rongda
Copy link

rongda commented Mar 9, 2022 via email

@russwest-dty
Copy link

    function insert(obj){
        let arr = new Array(12).fill(null)
        for(let i in obj){
            arr[i-1] = obj[i]
        }
        return arr
    }

@guzao
Copy link

guzao commented Jul 11, 2022

export function objectToArr (data: Record<string, number>): Array<any> {
  const result = new Array(12).fill(null)
  Object.keys(data).forEach((key: string) => result[+key - 1 ] = data[key])
  return result
}

@Lxming1
Copy link

Lxming1 commented Aug 7, 2022

const mount = {
1: 222,
2: 123,
5: 888
}
const arr = Array.from({length: 12}, (item, index) => mount[index+1] ?? null)
console.log(arr)

@benzhemin
Copy link

const transformSale = sales => {
    const monthsList = Array.from({length: 12}).map((_, index) => index+1);
    return monthsList.map(month => sales[month] ?? null)
}

const monthSalesTarget = {1: 222, 2: 123, 5: 888}

const monthSaleList = transformSale(monthSalesTarget);
console.log(monthSaleList);

@rongda
Copy link

rongda commented Feb 19, 2023 via email

@laoer536
Copy link

const base = { 1: 222, 2: 123, 5: 888 }
const newArray2 = Array.from(Array(12), (item, index) => [index + 1, null])
const resObj = { ...Object.fromEntries(newArray2), ...base }
const objValues = Object.values(resObj)
console.log(objValues)

@chenzhengduan
Copy link

const data={1:222, 2:123, 5:888}; let newArr=new Array(12).fill(null); for(item in data){ newArr[item-1]=data[item] } console.log(newArr) //[222, 123, null, null, 888, null, null, null, null, null, null, null]

@rongda
Copy link

rongda commented May 30, 2024 via email

@chenzhengduan
Copy link

const data={1:222, 2:123, 5:888};
let newArr=new Array(12).fill(null);
for(item in data){
newArr[item-1]=data[item]
}
console.log(newArr)
// [222, 123, null, null, 888, null, null, null, null, null, null, null]

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests