有没有办法正确地搜索一个对象并用ES6替换它的值


const isFieldEmpty = (data) => {
const newObj = Object.keys(data).map((key) => {
if (data[key] === '') {
const tempKey = key;
key.value = 'N/A';
return tempKey;
}
return key;
});
return newObj;
};

它应该搜索对象中的所有空字符串,然后用N/A替换。以上是我的尝试,但效果不好。

预期输入:

const input = { a: "foo", b: "bar", c: "", d: "baz", e: ""}

预期输出:

const foobar = { a: "foo", b: "bar", c: "N/A", d: "baz", e: "N/A"} 

如果您想要一个全新的对象,可以使用您正在使用的map运算符。如果是这样的话,您将不得不克隆原始对象。不过,如果你的对象中有嵌套的对象或数组,那么使用JS对象进行深度克隆可能会很棘手。如果你不需要一个全新的对象,那么更新原始对象的属性可以很容易地完成,如下所示。

const input = { a: "foo", b: "bar", c: "", d: "baz", e: ""}
Object.keys(input).forEach(key => input[key] = input[key] ? input[key] : 'N/A');
console.log(input);

只需在对象的键上循环

const isFieldEmpty = (data) => {
const newObj = { ...data };
Object.keys(newObj).forEach((i) => {
if (newObj[i] === "") {
newObj[i] = "N/A";
}
});
return newObj;
};
const input = { a: "foo", b: "bar", c: "", d: "baz", e: "" };
console.log(input);
// { a: "foo", b: "bar", c: "", d: "baz", e: "" }
console.log(isFieldEmpty(input));
// { a: "foo", b: "bar", c: "N/A", d: "baz", e: "N/A" }

const input = {
a: "foo",
b: "bar",
c: "",
d: "baz",
e: "",
f: {
g: "",
h: "bfoo"
}
};
function NAReplacer(obj) {
return Object.fromEntries(Object.entries(obj).map(([key, value]) => {
if (typeof value === 'string') {
return [key, value == '' ? 'N/A' : value];
}
if (Object.prototype.toString.call(value) === '[object Object]') {
return [key, NAReplacer(value)];
}
}));
}

console.log(NAReplacer(input));

您的解决方案就在那里。根据您的代码key.value = 'N/A';

您要更改的不是key.value,而是data[keys] = 'N/A';

最新更新