将 data 数组中的对象中的值赋值给 obj 对象的属性,有什么简洁的写法吗?

let obj = {
        province: "",
        provinceCode: "",
        city: "",
        cityCode: ""
}
let data = [{name:"四川省",code:"510000"},{name:"成都市",code:"510100"}]

obj.province = data[0].name
obj.provinceCode = data[0].code
obj.city = data[1].name
obj.cityCode = data[1].code

将data数组中的对象中的值赋值给obj对象的属性,有什么简洁的写法吗?

阅读 6.4k
7 个回答

如果data数组的长度不确定的话,可以使用索引替换A、B、C...

data.reduce((res, item, index) => {
  Object.entries(item).forEach(([key, value]) => res[key + index] = value)
  return res;
}, {})

如果data就固定的省市两项

function getObj(data) {
  const [{name: province, code: provinceCode},{name: city, code: cityCode}] = data;
  return {province, provinceCode, city, cityCode};
}
let obj = {
        province: "",
        provinceCode: "",
        city: "",
        cityCode: ""
}
let data = [{name:"四川省",code:"510000"},{name:"成都市",code:"510100"}]


data.forEach((v,i) => {
    var level = ['province','city','district'][i];
    obj[level] = v.name
    obj[level + 'Code'] = v.code
})

data.forEach((v,i) => Object.keys(v).forEach(k => obj[ k + String.fromCharCode(65+i) ] = v[k]))

let obj = {
    province: "",
    provinceCode: "",
    city: "",
    cityCode: ""
}
let data = [{name:"四川省",code:"510000"},{name:"成都市",code:"510100"}];
// 解构写法
let [{ name: province, code: provinceCode }, { name: city, code: cityCode }] = data;
obj = {
    province,
    provinceCode,
    city,
    cityCode,
}

image.png
直接生成结果

let obj = {
        province: "",
        provinceCode: "",
        city: "",
        cityCode: ""
}
let data = [{name:"四川省",code:"510000"},{name:"成都市",code:"510100"}];
objRal = ["province", "city"];//关联
data.reduce((acc,cur, idx) => {
    let key = objRal[idx];
    return {
        [key]: cur.name,
        [key + 'Code']: cur.code,
        ...acc
    };
},{})

Object.assign兼具复制和更新功能,这个场景下主要是更新:

Object.assign(obj, {
    province:     data[0].name,
    provinceCode: data[0].code,
    city:         data[1].name,
    cityCode:     data[1].code,
})

没有,你这个写法就可以,过分的简写造成代码可读性下降是没有必要的

你现在的写法就挺好的。没必要追求高大上,而导致代码难以被同事理解。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题