使用数组在 Javascript 中进行字符串处理

问题描述 投票:0回答:1

这是应转换为 JSON 格式的输入,如下所示。

'{RS0004036}:{1;2}:{0000003AB;0000003BC}_{RS0004036}:{0;3}:{0000003DE;0000003FG}_{RS0004036}:{3;3}:{0000003HI;0000003JK}'

目标 JSON 应该是这样的。代码应该读取上面的输入,将创建一个 JSON 返回字符串,如下所示。返回的 JSON 将返回 store,它只是输入字符串的索引 0 的一个值,并且不会作为partList重复。

"storeList": [
                {
                    "store": "RS0004036",
                    "partList": [
                        {
                            "part": "0000003AB",
                            "partSub": "0000003BC",
                            "qtyOnHand": "0",
                            "qtyMinMax": "3"
                        },
                               {
                            "part": "0000003DE",
                            "partSub": "0000003FG",
                            "qtyOnHand": "3",
                            "qtyMinMax": "3"
                        },
                        {
                            "part": "0000003HI",
                            "partSub": "0000003JK",
                            "qtyOnHand": "1",
                            "qtyMinMax": "2"
                        }
                    ]
                }
            ]

我尝试了以下代码:

String.prototype.replaceAll = function replaceAll(search, replace) {
  return this.split(search).join(replace);
}
var storeList = {};
var partList = [];
storeList.partList = partList;
var hdr_str = '{RS0004036}:{1;2}:{0000003AB;0000003BC}_{RS0004036}:{0;3}:{0000003DE;0000003FG}_{RS0004036}:{3;3}:{0000003HI;0000003JK}';
var sites_ar = [];
var str_array = hdr_str.split('_');

var str_us = [];
var qty_ar = [];
var hdr_parts = [];

var part_semi = [];
var part_detail = [];

function populate_part(str_in) {
  for (var i = 0; i < str_array.length; i++) {
    if (str_array[i] !== '"') {
      var str_colon = str_array[i];

      if (str_colon !== '"') {
        if (str_colon !== undefined) {
          const part_detail = str_colon.split(':');
          storeList.store = part_detail[0]
            partList = {
            "part": part_detail[0],
            "qtyOnHand": part_detail[1],
            "qtyMinMax": part_detail[2]
          }
          storeList.partList.push(partList);
        }
      }
    }
  }
}
pattern = ';';
replacement = ',';
hdr_str = hdr_str.replaceAll(pattern, replacement);
pattern = ':';
replacement = ',';
hdr_str = hdr_str.replaceAll(pattern, replacement);
hdr_str = '[' + hdr_str + ']';

for (var i = 0; i < hdr_str.length; i++) {
  if (str_array[i] !== '"') {
    populate_part(str_array[i]);
  }
}
retun(JSON.stringify(storeList));

但是它返回重复项,不确定问题出在哪里。

{"partList":[{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{0;3}","qtyMinMax":"{0000003DE;0000003FG}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"},{"part":"{RS0004036}","qtyOnHand":"{1;2}","qtyMinMax":"{0000003AB;0000003BC}"},{"part":"{RS0004036}","qtyOnHand":"{3;3}","qtyMinMax":"{0000003HI;0000003JK}"}],"store":"{RS0004036}"}
javascript arrays json string split
1个回答
0
投票

我无法帮助您调试当前的代码,因为我不明白它。我已经重构它,以产生您正在寻找的结果。

我们使用

str.slice(1, -1))
删除数据值周围的
{}
。然后就像将其分开并将其添加到数组中一样简单。

const hdr_str = '{RS0004036}:{1;2}:{0000003AB;0000003BC}_{RS0004036}:{0;3}:{0000003DE;0000003FG}_{RS0004036}:{3;3}:{0000003HI;0000003JK}';
const stores = [];

const partsDataEntries = hdr_str.split('_');
partsDataEntries.forEach(entry => {
  const partsData = entry.split(':').map(str => str.slice(1, -1));
  const storeId = partsData[0];
  const [qtyOnHand, qtyMinMax] = partsData[1].split(';');
  const [part, partSub] = partsData[2].split(';');
  
  if(!stores.find(store => store.store == storeId)) {
    stores.push({
      store: storeId,
      partList: []
    })
  }
  
  const store = stores.find(store => store.store == storeId);
  store.partList.push({
    part,
    partSub,
    qtyOnHand,
    qtyMinMax
  });
  
});

console.log(stores);

© www.soinside.com 2019 - 2024. All rights reserved.