我有一个物体
const data = {
"title": "new book"
"IsSale": 1,
"price" : 100,
}我想换到
const data = {
"title": "new book"
"IsSale": true,
"price" : 100,
}"IsSale": 1 > "IsSale": true
如果它是数组,我们可以使用reduce方法来更改它。但对于对象,我们有任何方法。当然,我们不会转换为数组,推演和转换回对象
发布于 2022-04-19 08:15:15
,如果它是数组,我们可以使用推演sic方法来改变它。但对于对象,我们有任何方法。
如果它是一个数组,那么您将使用map,而不是reduce (我猜您是指reduce)。或者是一个明显的循环。
为了解决这个问题:简单的版本是只编写一个对象文字:
const updated = {
...data,
IsSale: !!data.IsSale
};
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将其转换回对象:
const updated = Object.fromEntries(
Object.entries(data).map(([key, value]) =>
[key, key === "IsSale" ? !!value : value]
)
);
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循环来代替:
const updated = {};
for (const key in data) {
if (Object.hasOwn(data, key)) {
const value = data[key];
updated[key] = key === "IsSale" ? !!value : value;
}
}
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,如果您必须针对没有它的过时环境应用它,那么就使用它。)
发布于 2022-04-19 08:29:43
似乎您希望将对象中的属性的值转换为布尔值(true/false)。这里有一个小助手函数来执行这样的转换。它可以用于在对象数组中添加和/或转换属性IsSale。
// 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);.as-console-wrapper {
max-height: 100% !important;
}
https://stackoverflow.com/questions/71921580
复制相似问题