想要在javascript中合并键相同但值不同的两行



我有一个javascript字符串数组,由nodejs处理以更改输出。需要合并相同字符串前缀的值。

我所拥有的:

[
"$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,但没有成功。我不太擅长正则表达式。

谢谢你在这方面的帮助。

使用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)

例如,首先,我创建一个对象,用它的值数组对每个键进行分组。

{
"$button-primary-font-color-default:": ["'light':#000", "'dark':#fff"]
}

然后我map将对象设置为字符串格式。

const data = [
"$button-primary-font-color-default: ('light':#000);",
"$button-primary-font-color-default: ('dark':#fff);"
]

const obj = data.reduce((acc, i) => {
const [_, key, value] = i.match(/($.*?:)s(('w+':s?.+?));/i)
acc[key] ? (acc[key] = [...acc[key], value]) : acc[key] = [value]
return acc
}, {})

const result = Object.entries(obj).map(([key, value]) => {
return `${key} (${value.join(', ')})`
})
console.log(result)

最新更新