Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/73.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在简单示例中,数组映射函数无法推送对象_Javascript_Html_Arrays_Ecmascript 6 - Fatal编程技术网

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

Javascript 在简单示例中,数组映射函数无法推送对象,javascript,html,arrays,ecmascript-6,Javascript,Html,Arrays,Ecmascript 6,我在数组中获得了一组对象(带有国家和州键以及值)的数据 现在,我需要以这样一种方式格式化数据,以获得一个新数组(countryName作为键,数组中的状态列表作为值) 我正试图这样做,但没有成功。有人能帮我吗 var数据=[ { “国家”:“美国”, “国家”:[ “阿拉巴马”, “阿拉斯加”, “亚利桑那州”, ] }, { “国家”:“加拿大”, “国家”:[ “安大略省”, “萨斯喀彻温省”, “阿尔伯塔省”, ] }, { “国家”:“澳大利亚”, “国家”:[ “澳大利亚首都领土”,

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

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

我正试图这样做,但没有成功。有人能帮我吗

var数据=[
{
“国家”:“美国”,
“国家”:[
“阿拉巴马”,
“阿拉斯加”,
“亚利桑那州”,
]
},
{
“国家”:“加拿大”,
“国家”:[
“安大略省”,
“萨斯喀彻温省”,
“阿尔伯塔省”,
]
},
{
“国家”:“澳大利亚”,
“国家”:[
“澳大利亚首都领土”,
“杰维斯湾地区”,
“新南威尔士”,
“昆士兰”,
]
}
];
新数据=[];
map(item=>newData.push({item.country:item.states});

console.log(newData);
这是因为带点的对象键不是有效的语法。您可以通过使用
[]
包装键来解决此问题。此外,方法创建一个新数组,其中填充了对调用数组中的每个元素调用提供函数的结果。因此,您可以在此处使用如下方法:

data.forEach(item => newData.push({[item.country]: item.states})); 
var数据=[{国家:“美国”,州:[“阿拉巴马州”、“阿拉斯加”、“亚利桑那州”]},{国家:“加拿大”,州:[“安大略省”、“萨斯喀彻温省”、“阿尔伯塔省”]},{国家:“澳大利亚”,州:[“澳大利亚首都地区”、“杰维斯湾地区”、“新南威尔士州”、“昆士兰州”]};
var newData=[];
data.forEach(item=>newData.push({[item.country]:item.states}));
console.log(newData);
。作为控制台包装{max height:100%!important;top:0;}
尝试这样做

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",
        ]
    }
];


let newData = data.map(item => { return { [item.country] : [...item.states]}})
console.log(newData);

您可以试试这个:
它能很好地满足您的需求

data.forEach(item => {
    const obj = new Object();
    obj[item.country] = item.states;
    newData.push(obj)
});
这里我们使用
new
关键字来声明我们的对象,并将该对象推入数组中。另外,由于
country
是一个变量,因此我们使用
[]
符号,而不是
dot
符号。

让arr=[]
array.forEach(元素=>{
arr.push({key:element.country,value:element.state})

}
正确使用
map
是在map方法中返回值,这在代码中是缺失的。除此之外,使用destructure进一步简化

const newData = data.map(({country, states}) => ({[country]: states}));
var数据=[
{
“国家”:“美国”,
“国家”:[
“阿拉巴马”,
“阿拉斯加”,
“亚利桑那州”,
]
},
{
“国家”:“加拿大”,
“国家”:[
“安大略省”,
“萨斯喀彻温省”,
“阿尔伯塔省”,
]
},
{
“国家”:“澳大利亚”,
“国家”:[
“澳大利亚首都领土”,
“杰维斯湾地区”,
“新南威尔士”,
“昆士兰”,
]
}
];
const newData=data.map({country,states})=>({[country]:states}));

console.log(newData);
这是对
map()
的不当使用。当您希望结果累加翻译并将它们全部返回到数组中存储在变量中时,可以使用
map()
。您的实例没有这样做,只是使用它进行迭代。您应该使用
forEach()
相反,.ForEach是旧的,TLs要求避免使用它——支持.map()或.filter();此外,如果您希望键中有句点,则需要引用它们,例如
{'item.country':'my value'}
不确定函数的年龄与任何内容有什么关系。它工作得非常好。否则,请正确使用map。@Deadpool什么是“TLs”但是是的,当您避免使用
forEach
时,您也应该避免使用
push
。使用
map
的返回值!
newData=data.map(item=>({[item.country]:item.states}));
将是map的正确用法。