使用 forEach 替换字符串的一部分?
2020-07-28
116
我的输入框 ID 带有前缀“add-product-”,我想用空字符替换“add-product-”。因此,我尝试使用
data[field.id].replace("add-product-", "");
,但它给出了错误:
[Error] TypeError: undefined is not an object (evaluating 'data[field.id].replace')
这是我的代码:
function addproduct(){
var datafeilds = Array.from(document.querySelectorAll("[id^='add-product-']"));
var data = {};
datafeilds.forEach(function(field){
data[field.id].replace("add-product-", "");
data[field.id] = field.value;
});
console.log(data);
}
输出为:
[Log] {add-product-name: "", add-product-overlay1: "", add-product-overlay2: "", add-product-wholesale_price: "", add-product-delivery_price: "", …}
我希望它是:
[Log] {name: "", overlay1: "", overlay2: "", wholesale_price: "", delivery_price: "", …}
2个回答
您可以在再次添加到空对象之前使用
replace
。另外,您不需要在
datafeilds
中使用
Array.From
,因为
querySelectorAll
默认返回数组中的所有
nodes
。
运行下面的代码片段以查看其是否正常工作并全部替换。
function addproduct() {
var datafeilds = document.querySelectorAll("[id^='add-product-']")
var data = {};
datafeilds.forEach(function(field) {
//replace all add-products with ""
var replace = field.id.replace("add-product-", "");
//Push to data {}
data[replace] = field.value
});
console.log(data)
}
addproduct()
<input id='add-product-name' value="1" />
<input id='add-product-overlay1' value="1" />
<input id='add-product-overlay2' value="1" />
<input id='add-product-wholesale_price' value="1" />
<input id='add-product-delivery_price' value="1" />
Always Helping
2020-07-28
您的数据对象为空,因此访问其上的 field.id 属性将返回未定义。所以您收到上述错误。
关于前缀 id,您可以通过制作
document.querySelectorAll("input[id^='prefixvalue']")
Asutosh
2020-07-28