首页 > 解决方案 > 使用 forEach 替换部分字符串?

问题描述

我有标有前缀“add-product-”的输入框 ID,我想用什么替换“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: "", …}

标签: javascript

解决方案


您可以replace在再次添加到空 obj 之前使用。此外,您不需要Array.From在您的datafeildsas 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" />


推荐阅读