首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何用条件将对象转换为新对象

如何用条件将对象转换为新对象
EN

Stack Overflow用户
提问于 2022-04-19 08:06:28
回答 2查看 115关注 0票数 0

我有一个物体

代码语言:javascript
复制
const data = {
    "title": "new book"
    "IsSale": 1,
    "price" : 100,
}

我想换到

代码语言:javascript
复制
const data = {
    "title": "new book"
    "IsSale": true,
    "price" : 100,
}

"IsSale": 1 > "IsSale": true

如果它是数组,我们可以使用reduce方法来更改它。但对于对象,我们有任何方法。当然,我们不会转换为数组,推演和转换回对象

EN

回答 2

Stack Overflow用户

发布于 2022-04-19 08:15:15

,如果它是数组,我们可以使用推演sic方法来改变它。但对于对象,我们有任何方法。

如果它是一个数组,那么您将使用map,而不是reduce (我猜您是指reduce)。或者是一个明显的循环。

为了解决这个问题:简单的版本是只编写一个对象文字:

代码语言:javascript
复制
const updated = {
    ...data,
    IsSale: !!data.IsSale
};

代码语言:javascript
复制
const data = {
    "title": "new book",
    "IsSale": 1,
    "price" : 100,
};

const updated = {
    ...data,
    IsSale: !!data.IsSale
};

console.log(updated);

如果出于某种原因,您需要做一些其他事情,那么有一种方法可以对对象进行类似的操作,但是它涉及到很多中间对象。(这通常不重要,有时会。)您可以使用使用Object.entries获取一个[key, value]数组,然后对其使用map,然后使用Object.fromEntries将其转换回对象:

代码语言:javascript
复制
const updated = Object.fromEntries(
    Object.entries(data).map(([key, value]) =>
        [key, key === "IsSale" ? !!value : value]
    )
);

代码语言:javascript
复制
const data = {
    "title": "new book",
    "IsSale": 1,
    "price" : 100,
};

const updated = Object.fromEntries(
    Object.entries(data).map(([key, value]) =>
        [key, key === "IsSale" ? !!value : value]
    )
);

console.log(updated);

或者您可以使用一个for-in循环来代替:

代码语言:javascript
复制
const updated = {};
for (const key in data) {
    if (Object.hasOwn(data, key)) {
        const value = data[key];
        updated[key] = key === "IsSale" ? !!value : value;
    }
}

代码语言:javascript
复制
const data = {
    "title": "new book",
    "IsSale": 1,
    "price" : 100,
};

const updated = {};
for (const key in data) {
    if (Object.hasOwn(data, key)) {
        const value = data[key];
        updated[key] = key === "IsSale" ? !!value : value;
    }
}

console.log(updated);

(注意:这使用了新的Object.hasOwn,如果您必须针对没有它的过时环境应用它,那么就使用它。)

票数 2
EN

Stack Overflow用户

发布于 2022-04-19 08:29:43

似乎您希望将对象中的属性的值转换为布尔值(true/false)。这里有一个小助手函数来执行这样的转换。它可以用于在对象数组中添加和/或转换属性IsSale

代码语言:javascript
复制
// Note: !!data.IsSale can be used as shorthand
const sale2bool = data => data.IsSale = Boolean(data.IsSale);

const data = [{
    "title": "new book",
    "IsSale": 1,
    "price" : 100,
  }, {
   "title": "another new book",
    "IsSale": 0,
    "price" : 110,
  }, {
    "title": "old book",
    "IsSale": 15,
    "price" : 50,
  }, {
    // Note: no IsSale property
    "title": "old book",
    "price" : 50,
  }];
  
data.forEach(sale2bool);
console.log(data);
代码语言:javascript
复制
.as-console-wrapper {
  max-height: 100% !important;
}

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/71921580

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档