开发者问题收集

使用 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