Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/419.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_Arrays_Object - Fatal编程技术网

如何在javascript中将数组作为对象传递?

如何在javascript中将数组作为对象传递?,javascript,arrays,object,Javascript,Arrays,Object,我可以通过这种方式传递数组的值,并且它可以正常工作 const obj = [ { text1: "John", text2: "male" }, { text1: "Philip", text2: "male" }, { text1: "Matthew", text2: "male" }, { text1: "Richard", text2

我可以通过这种方式传递数组的值,并且它可以正常工作

const obj = [
  { text1: "John", text2: "male" },
  { text1: "Philip", text2: "male" },
  { text1: "Matthew", text2: "male" },
  { text1: "Richard", text2: "male" },
 ];
但我必须这样通过

var obj = {
    text1: ["John", "Philip", "Matthew", "Richard"],
    text2: ["male", "male", "male", "male"]
};

使用
Array.prototype.reduce
,这可以简单地完成

const obj=[
{text1:“约翰”,text2:“男性”},
{text1:“菲利普”,text2:“男性”},
{text1:“马修”,text2:“男性”},
{text1:“理查德”,text2:“男性”},
];
常量输出=对象减少((acc,cur)=>{
Object.keys(cur.forEach)((项)=>{
acc[项目]?acc[项目]。推送(当前[项目]):acc[项目]=当前[项目];
});
返回acc;
}, {});
控制台日志(输出)
const obj=[{
正文1:“约翰”,
正文2:“男性”
},
{
正文1:“菲利普”,
正文2:“男性”
},
{
正文1:“马修”,
正文2:“男性”
},
{
正文1:“理查德”,
正文2:“男性”
},
];
变量输出={}
对象forEach(项目=>{
Object.keys(项).forEach(项=>{
如果(!output[key])output[key]=[];
输出[键]。推送(项[键])
})
})

控制台日志(输出)您可能希望按键对值进行分组

  • 通过
    输入的每一项使用循环
  • 在每个项目中,尝试收集属于此项目的所有密钥的名称
  • 在每个键的名称上使用
    for…循环
    ,检查
    obj[k]
    是否为空,然后我们必须将一个空数组和该键(
    k
    )的值分配到
    obj[k]
  • 这就是解决办法

    const输入=[
    {text1:'约翰',text2:'男性'},
    {text1:'菲利普',text2:'男性'},
    {text1:'马修',text2:'男'},
    {text1:'理查德',text2:'男性'},
    ];
    函数数组(数组){
    常量obj={};
    array.forEach(项=>{
    常量键=对象键(项);
    用于(密钥常数k){
    (obj[k]=obj[k]| |[])。推送(项目[k]);
    }
    });
    返回obj;
    }
    常量输出=数组(输入);
    控制台日志(输出);
    
    我们可以使用
    数组来实现这一点。减少
    对象。条目

    const obj=[{text1:“约翰”,text2:“男性”},{text1:“菲利普”,text2:“男性”},{text1:“马修”,text2:“男性”},{text1:“理查德”,text2:“男性”},]
    const formatData=(data)=>data.reduce((res,obj)=>{
    Object.entries(obj.forEach)([key,val])=>{
    res[key]=[…(res[key]| |[]),val];
    });
    返回res;
    }, {});
    console.log(formatData(obj))
    
    。作为控制台包装器{
    最大高度:100%!重要;
    
    }
    初始数组中的所有对象是否只有
    text1
    text2
    ,或者是否有其他属性?只有text 1和text2可以像数组一样传递,而无需重复键入text1和text2text2@BarryAllen除了每个属性名之外,您不需要重复任何内容两次(一次用于源,一次用于目标)-我遗漏了什么吗?不@Dai,我明白你的意思。像这样的
    text1:[“John”、“Philip”、“Matthew”、“Richard”]、text2:[“male”、“male”、“male”、“male”、“male”]
    。两个属性和四项/多项数组。@BarryAllen您所说的“组件”是什么意思?我发布的代码假设
    input
    是您的
    obj
    数组,它将正确处理任何大小的数组。好的@dai。谢谢。
    const input = [
      { text1: "John", text2: "male" },
      { text1: "Philip", text2: "male" },
      { text1: "Matthew", text2: "male" },
      { text1: "Richard", text2: "male" },
     ];
    
    const output = {
        text1: input.map( e => e.text1 ),
        text2: input.map( e => e.text2 )
    };