我有一個字串
var str = "1:6,5,2,2:3";
我想把它轉換str成一個 js 字典,這樣:
var dict = {1:"6,5,2",
2:"3"};
這樣我就可以通過它們各自的鍵索引來獲取值。我該如何轉換它?
我曾嘗試使用此代碼將拆分后的值存盤到陣列中:
var pages = "1:6,5,2,2:3";
var numbers = [];
if (pages.includes(',')) {
page_nos = pages.split(',');
for (var i = 0; i < page_nos.length; i ) {
if (page_nos[i].includes(':')) {
var n = page_nos[i].split(':');
numbers.push(n[1]);
} else {
numbers.push(page_nos[i]);
}
}
} else {
page_nos = pages.split(':');
numbers.push(page_nos[1])
};
console.log('numbers: ', numbers);
但這是不正確的,因為沒有dictionary它就不可能知道哪個值屬于哪個索引
uj5u.com熱心網友回復:
如果您一開始就無法使輸入字串成為正確的 JSON 或其他易于決議的格式,這將回答您的問題:
const str = "1:6,5,2,2:3";
const obj = str.split(/,(?=\d :)/).reduce(((accu, part) => {
const [k, v] = part.split(':', 2);
accu[k] = v;
return accu;
}), {});
console.log(obj);
在后面跟數字和冒號的所有逗號處剪切字串。每個部分在冒號前面有一個鍵,在它后面有一個值,應該以這種格式填充到一個物件中。
uj5u.com熱心網友回復:
下面介紹的可能是實作預期目標的一種可能的解決方案。
注意:
代替var代碼使用let或const適用。
代碼片段
const pages = "1:6,5,2,2:3";
const resObj = {};
let page_nos, k;
if (pages.includes(',')) {
page_nos = pages.split(',');
for (let i = 0; i < page_nos.length; i ) {
if (page_nos[i].includes(':')) {
let n = page_nos[i].split(':');
k = n[0];
resObj[k] = n[1].toString();
} else {
resObj[k] = ", " page_nos[i].toString();
}
}
} else {
page_nos = pages.split(':');
resObj[page_nos[0]] = [page_nos[1]]
numbers.push(page_nos[1])
};
console.log('result object: ', resObj);
此代碼基本上修復了問題中給出的代碼。它是不言自明的,可以根據評論中的問題添加所需的任何具體資訊。
uj5u.com熱心網友回復:
沒有突變解決方案。
使用 split 捕獲數字和冒號,然后您可以將結果陣列減少為二維鍵、值對,并制作二維陣列的物件(字典在 js 中稱為物件)。
const str = "1:6,5,2,2:3";
const dict = Object.fromEntries(str
.split(/(\d :)/g)
.reduce((t, c, i, arr) =>
/:$/.test(c) ? [...t, [c.slice(0, -1), arr[i 1]?.replace(/,$/, "")]]
: t
, [])
);
console.log(dict);
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/463710.html
標籤:javascript
