如何按区域过滤并将其从结果数组中删除?

Rey*_*rPM 2 javascript arrays

我有以下数组结构:

const values = [{
    "region": "US", "content": "content 1", "value": "value1"
}, {
    "region": "US", "content": "content 2", "value": "value2"
}, {
    "region": "US", "content": "content 3", "value": "value3"
}, {
    "region": "LA", "content": "content 4", "value": "value4"
}, {
    "region": "LA", "content": "content 5", "value": "value5"
}, {
    "region": "LA", "content": "content 6", "value": "value6"
}, {
    "region": "LA", "content": "content 7", "value": "value7"
}]
Run Code Online (Sandbox Code Playgroud)

我正在尝试将其转换为以下内容 - 请注意,region密钥已从输出数组内的结果对象中消失:

const output = [{
    "US": [
        {"content": "content 1", "value": "value1"},
        {"content": "content 2", "value": "value2"},
        {"content": "content 3", "value": "value3"}
    ],
    "LA": [
        {"content": "content 4", "value": "value4"},
        {"content": "content 5", "value": "value5"},
        {"content": "content 6", "value": "value6"},
        {"content": "content 7", "value": "value7"}
    ]
}]
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我尝试过的:

let outputValues = [];

values.forEach(currentElement => {
    outputValues[currentElement.region].push(currentElement);
})

console.log(outputValues);
Run Code Online (Sandbox Code Playgroud)

上述解决方案给我以下错误:

未捕获的类型错误:无法读取未定义的属性(读取“push”)

不知道为什么。

我也尝试过:

# 1st option
outputValues[currentElement.region] = currentElement;

# 2nd option
outputValues[currentElement.region] = [];
outputValues[currentElement.region].push(currentElement);
Run Code Online (Sandbox Code Playgroud)

但这仅添加主values数组中的最后一个元素。我在这里缺少什么?

Nin*_*olz 6

如果不想保留原来的对象,可以将不需要的键作为分组值,并在分组时删除该属性。

const
    values = [{ region: "US", content: "content 1", value: "value1" }, { region: "US", content: "content 2", value: "value2" }, { region: "US", content: "content 3", value: "value3" }, { region: "LA", content: "content 4", value: "value4" }, { region: "LA", content: "content 5", value: "value5" }, { region: "LA", content: "content 6", value: "value6" }, { region: "LA", content: "content 7", value: "value7" }],
    result = Object.groupBy(values, o => {
        const group = o.region;
        delete o.region;
        return group;
    });

console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)

不改变数据和不改变数据的解决方案groupBy

const
    values = [{ region: "US", content: "content 1", value: "value1" }, { region: "US", content: "content 2", value: "value2" }, { region: "US", content: "content 3", value: "value3" }, { region: "LA", content: "content 4", value: "value4" }, { region: "LA", content: "content 5", value: "value5" }, { region: "LA", content: "content 6", value: "value6" }, { region: "LA", content: "content 7", value: "value7" }],
    result = values.reduce((r, { region, ...o}) => {
        (r[region] ??= []).push(o);
        return r;
    }, {});

console.log(result);
Run Code Online (Sandbox Code Playgroud)
.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)