数组映射函数无法在简单示例中推送对象

Dea*_*ool 2 html javascript arrays ecmascript-6

我在数组中获得了一组对象(带有国家和州键以及值)的数据。

现在,我需要以这样的方式格式化数据,我得到一个新数组(以 countryName 作为键,状态列表 - 在数组中作为值)。

我正在尝试这样做,但没有成功。有人可以帮我吗?

var data = [
    {
        "country": "United States",
        "states": [
            "Alabama",
            "Alaska",
            "Arizona",
        ]
    },
    {
        "country": "Canada",
        "states": [
            "Ontario",
            "Saskatchewan",
            "Alberta",
        ]
    },
    {
        "country": "Australia",
        "states": [
            "Australian Capital Territory",
            "Jervis Bay Territory",
            "New South Wales",
            "Queensland",
        ]
    }
];

newData = []; 
data.map(item => newData.push({item.country: item.states});
console.log(newData);
Run Code Online (Sandbox Code Playgroud)

pal*_*aѕн 5

那是因为带点的对象键不是有效的语法。您可以通过用 包裹密钥来解决此问题[]。此外,.map()method 创建一个新数组,其中填充了对调用数组中的每个元素调用提供的函数的结果。因此,您应该在.forEach()这里使用方法,例如:

data.forEach(item => newData.push({[item.country]: item.states})); 
Run Code Online (Sandbox Code Playgroud)

data.forEach(item => newData.push({[item.country]: item.states})); 
Run Code Online (Sandbox Code Playgroud)
var data=[{country:"United States",states:["Alabama","Alaska","Arizona"]},{country:"Canada",states:["Ontario","Saskatchewan","Alberta"]},{country:"Australia",states:["Australian Capital Territory","Jervis Bay Territory","New South Wales","Queensland"]}];

var newData = []; 
data.forEach(item => newData.push({[item.country]: item.states}));
console.log(newData);
Run Code Online (Sandbox Code Playgroud)


或者,您可以使用.map()方法并简单地在.map()回调中返回对象并将其存储在newData

 newData = data.map(item => ({[item.country]: item.states}));
Run Code Online (Sandbox Code Playgroud)

.as-console-wrapper { max-height: 100% !important; top: 0; }
Run Code Online (Sandbox Code Playgroud)
 newData = data.map(item => ({[item.country]: item.states}));
Run Code Online (Sandbox Code Playgroud)