js中对象创建问题

let a = '';
let b = '1';
let obj = {
    data1: a === ''? null:a,
    data2: b,
}

上面代码中,能否直接在obj中判断,如果a为空时,不添加data1,请问有相关的语法吗

阅读 3.3k
8 个回答
let a = '';
let b = '1';
let obj = {
    ...(a!=='' && {a}),
    data2: b,
}

obj是一个对象,data1是obj的属性,data1属性值是一个表达式,没有问题。

没有相关的语法,不过你在可在套一层函数实现需求

const removeFlaseValue = (obj) => {
  for (const key of Object.keys(obj)) {
    if (obj[key] === null || obj[key] === undefined || obj[key] === '') {
      delete obj[key];
    }
  }

  return obj;
};

let a = '';
let b = '1';
let obj = removeFalseValue({
    data1: a,
    data2: b,
})

一定要在obj对象内部去判断基本无解

常规操作:

if(a) obj['data1'] = a;

不明白为什么非要在对象内部判断,不过既然他都这么问了,就玩点花的。。虽然不是时间安全的

let a = '';
let b = '1';
let obj = {
  data1:(function(){ 
    if (a === '') {
      setTimeout(() => {
        delete(obj.data1);
      },1);
    }
    return a;
  })(),
  data2:b,
}
> obj
< {data2: "1"}

可以试下赋值成undefined,用JSON.parse(JSON.stringify(obj)) 多做一步转换

let a = '';
let b = '1';
let obj = {
    data1: a === ''? undefined:a,
    data2: b,
}
JSON.parse(JSON.stringify(obj))

image.png

只能是2种方式:

  • 为空就不添加key
  • 为空就进行删除key

没有你想要的语法,只能按常规语法生成对象之后再把属性过滤一遍,

let a = "";
let b = "1";

let obj = {
    data1: a === "" ? null : a,
    data2: b,
};

obj = Object.fromEntries(
    Object.entries(obj)
        .filter(([, v]) => v !== null && v !== undefined)
);

console.log(obj);

或者可以用删除 key 的方法去除多余的属性

Object.entries(obj)
    .filter(([, v]) => v === null || v === undefined)
    .forEach(([key]) => delete obj[key]);

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