使用 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: "", …}


POPMUISE
浏览 167回答 2
2回答

弑天下

您可以replace在再次添加到空对象之前使用。您也不需要Array.From在您datafeilds的querySelectorAll中使用默认情况下返回nodes数组中的所有内容。运行下面的代码片段以查看它是否正常工作并全部替换。function addproduct() {&nbsp; var datafeilds = document.querySelectorAll("[id^='add-product-']")&nbsp; var data = {};&nbsp; datafeilds.forEach(function(field) {&nbsp; &nbsp; //replace all add-products with ""&nbsp; &nbsp; var replace = field.id.replace("add-product-", "");&nbsp; &nbsp; //Push to data {}&nbsp; &nbsp; data[replace] = field.value&nbsp; });&nbsp; 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" />

素胚勾勒不出你

您的数据对象为空,因此访问其上的 field.id 属性将返回未定义。所以你得到了上面的错误。关于前缀ID,您可以通过制作document.querySelectorAll("input[id^='prefixvalue']")
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript