![](/img/trans.png)
[英]Merge two arrays with the same keys and different length in Javascript
[英]Want to merge two line with same keys but different values in javascript
我有一個 javascript 字符串數組,由 nodejs 處理以更改 output。 需要合並相同字符串前綴的值。
我有的:
[
"$button-primary-font-color-default: ('light':#000);",
"$button-primary-font-color-default: ('dark':#fff);"
]
我想要的是:
["$button-primary-font-color-default: ('light':#000, 'dark':#fff);"]
我試過 array.filter 沒有成功。 我對正則表達式不太擅長。
感謝您對此的任何幫助。
首先,例如,我創建一個 object 以將每個鍵與其值的數組分組。
{
"$button-primary-font-color-default:": ["'light':#000", "'dark':#fff"]
}
然后我map
編輯為 object 為字符串格式。
const data = [ "$button-primary-font-color-default: ('light':#000);", "$button-primary-font-color-default: ('dark':#fff);" ] const obj = data.reduce((acc, i) => { const key = i.match(/\$.*?:/) const [_, value] = i.match(/\(('\w+':#[0-9a-f]{3})\);/i) if (acc[key]) { acc[key] = [...acc[key], value] } else { acc[key] = [value] } return acc }, {}) const result = Object.entries(obj).map(([key, value]) => { return `${key} (${value.join(', ')})` }) console.log(result)
使用reduce
方法按屬性名稱分組。 然后將解決方案展平為所需的格式。 這與其他答案類似,只是屬性更通用一點。
var input = [ "$button-primary-font-color-default: ('light':#000);", "$button-primary-font-color-default: ('dark':#fff);", "$button-secondary-font-color-default: ('secondary':red);" ]; var step1 = input.reduce(function(agg, line) { var prop = line.slice(0, line.indexOf(':')).trim(); var value = line.slice(line.indexOf(':') + 1, line.indexOf(';')).trim().slice(1, -1); agg[prop] = agg[prop] || [] agg[prop].push(value) return agg; }, {}) var result = Object.entries(step1).map(function([prop,value]) { return prop + " " + "(" + value.join(", ") + ")"; }); console.log(result)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.