使用javascript更新foreach循环中的数组对象



我正在尝试创建一个新数组。我有一个不同版本的插件列表,我需要找到具有相同uniqueIdentifier但版本不同的插件,并从中创建一个数组。示例:

{
"uniqueIdentifier": "theme_test",
"version": "2011120800"
},
{
"uniqueIdentifier": "theme_test",
"version": "3011120800"
},
{
"uniqueIdentifier": "theme_test",
"version": "4011120800"
},

像这样:

{
"uniqueIdentifier": "theme_test",
"version": [
"2011120800",
"3011120800",
"4011120800"
]
}

因此,在我的代码中,我获得了所有信息,但我无法将这些版本存储为数组。因此,我正在检查uniqueIdentifier,然后检查版本,并尝试生成新的数组:

item.pluginVersions.items.forEach(function(plugin) {
pluginVersionsSupported.forEach(function(supportedPlugin) {
if (plugin.uniqueIdentifier === supportedPlugin.uniqueIdentifier) {
if (plugin.version == supportedPlugin.version) {
pluginData = {
uniqueIdentifier: plugin.uniqueIdentifier,
version: []// need to update this to be an array
}
}
}
})

我感谢所有的帮助。

您需要使用Array.reduce方法:

const data = 
[ { uniqueIdentifier: 'theme_test', version: '2011120800' } 
, { uniqueIdentifier: 'theme_test', version: '3011120800' } 
, { uniqueIdentifier: 'theme_test', version: '4011120800' } 
] 
const result = Object.values(data.reduce( (r,{uniqueIdentifier,version}) =>
{
r[uniqueIdentifier] ??= { uniqueIdentifier, version:[] }
r[uniqueIdentifier].version.push(version)
return r
},{}))
console.log(result)

假设您只有一个pluginData:将新对象移出循环,使其不会重复创建,并在循环中将版本推送到现有数组。

pluginData = {
uniqueIdentifier: plugin.uniqueIdentifier,
version: []
}
item.pluginVersions.items.forEach(function(plugin) {
...
if (plugin.version == supportedPlugin.version) {
pluginData.version.push(plugin.version);

您也可以使用Array#reduce()Object.entries(),如下所示:

const data = [{"uniqueIdentifier": "theme_test","version": "2011120800"},{"uniqueIdentifier": "theme_test","version": "3011120800"},{"uniqueIdentifier": "theme_test","version": "4011120800"}];
const groupedData = Object.entries(
data.reduce(
(prev, {uniqueIdentifier,version}) => 
({ ...prev, [uniqueIdentifier]:(prev[uniqueIdentifier] || []).concat(version) }), {}
)
)
.map(([uniqueIdentifier,version]) => ({uniqueIdentifier,version}));
console.log( groupedData );

最新更新