js中对象创建问题

发布于 2022-09-12 23:37:16 字数 174 浏览 11 评论 0

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

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

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(8

let a = '';
let b = '1';
let obj = {
    ...(a!=='' && {a}),
    data2: b,
}
汹涌人海 2022-09-19 23:37:16

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

酒中人 2022-09-19 23:37:16

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

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,
})
神魇的王 2022-09-19 23:37:16

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

常规操作:

if(a) obj['data1'] = a;
做个少女永远怀春 2022-09-19 23:37:16

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

let a = '';
let b = '1';
let obj = {
  data1:(function(){ 
    if (a === '') {
      setTimeout(() => {
        delete(obj.data1);
      },1);
    }
    return a;
  })(),
  data2:b,
}
> obj
< {data2: "1"}
燕归巢 2022-09-19 23:37:16

可以试下赋值成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

野心澎湃 2022-09-19 23:37:16

只能是2种方式:

  • 为空就不添加key
  • 为空就进行删除key
你爱我像她 2022-09-19 23:37:16

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

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);
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文