微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在对象中查找要编辑或添加

如何解决在对象中查找要编辑或添加

我有一个对象 productCounts

[{provisioned=2.0,product=str1,totalID=1.0},{product=str2,provisioned=4.0,totalID=3.0},{provisioned=6.0,product=str3,totalID=5.0}]

我有一个数组 uniqueProduct

[str1,str2,str3,str4]

然后我循环一个数据集以获取 totalID 计数,将其添加到产品的 totalID 中,但如果它不存在,则将其推送到对象。

var countID = 0;

uniqueProduct.forEach(
  currentproduct => {
    countID = 0;
    for (var i = 0; i < shtRng.length; ++i) {
      if (shtRng[i][ProductCol].toString() == currentproduct) { // && shtRng[i][IDcol].toString().length>4){
        countID++;
      }
    }
    if (countID == 0) {
      return;
    }

    console.log(currentproduct + ": " + countID);
  }
)

这非常适合返回 uniqueProduct 中每个产品的 countID

我不想记录结果,而是像这样将其添加到对象中...如果当前唯一产品不在 productCounts 对象中,请添加它。

let obj = productCounts.find((o,i) => {
    if (o.product == currentproduct) {
        productCounts[i] = { product: currentproduct,totalID: productCounts[i].totalID+countID,provisioned: productCounts[i].provisioned };
        return true;
    } else {
        productCounts.push({ product: currentproduct,totalID: countID,provisioned: 0 });
        return true;
    }
}); 

在我看来,这应该可行,但它似乎跳过了一些记录或多次添加产品。如何正确添加到对象?

预期输出是类似于以下内容的对象:

[{provisioned=2.0,totalID=35.0},{product=str2,provisioned=4.0,totalID=8.0}, {provisioned=6.0,totalID=51.0},product=str4,totalID=14.0}]

解决方法

//results },process13x21: { '-i': 'D:\\Code\\UnitTest\\ConsoleApp\\1\\13x23.png','-tr': 16,'-tc': 16,'-ofr': 16,'-ofc': 16,'-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' },process13x22: { '-i': 'D:\\Code\\UnitTest\\ConsoleApp\\1\\13x23.png',process13x23: { '-i': 'D:\\Code\\UnitTest\\ConsoleApp\\1\\13x23.png','-outfile': '"D:\\Code\\UnitTest\\ConsoleApp\\Process\\1"' } } // ADDED CODE // loop through each data we want to add and add a property. ` consoleOutputParamsOBJ.forEach((obj) => { var processname = dynamicTaskNameBaseOBJ + obj.name; console.log(processname); //taskparamscompiled.processname['-i'] = obj.filepath; taskparamscompiled[processname]['-i'] = obj.filepath; // console.log(dynamicTaskNameBaseOBJ + obj.name); }); console.log(taskparamscompiled);` 的参数是一个函数,当元素符合条件时返回一个布尔值。 find() 语句应该使用 this 的结果,而不应该在条件函数中。

if

顺便说一句,如果您使用键是产品名称的对象而不是对象数组,您的生活会更轻松。您可以轻松地将对象数组变成这样的对象:

let obj = productCounts.find(o => o.product == currentProduct);
if (obj) {
    obj.totalId += countID;
} else {
    productCounts.push(productCounts.push({ product: currentproduct,totalID: countID,provisioned: 0 });
}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。