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

Javascript 基于两个数组创建一个数组

Javascript 基于两个数组创建一个数组,javascript,arrays,Javascript,Arrays,我有两个数组详细信息和选项,它们来自不同的来源(web api请求) 我想把这两个阵列组合起来 combined: [ groups: { options:[ { id: 'g1' }, { id: 'g2' } ], details: { option: true}

我有两个数组
详细信息
选项
,它们来自不同的来源(web api请求)

我想把这两个阵列组合起来

combined: [
        groups: 
            {
                options:[ 
                    { id: 'g1' },
                    { id: 'g2' }
                ], 
                details: { option: true}
            },
        category: 
                {
                 options:   [ 
                    { id: 'c1' },
                    { id: 'c2' }
                ], 
                details: { option: false}
            },
    ]
基本上,如果
details
中的任何
id
options
属性匹配,则它应该进入相同属性名称下的新数组,并且除了
id
之外的所有
details
都会进入相关的
details
属性


最好的方法是什么?lodash可以处理吗?

如果您只需要
选项和
详细信息中的项目
():

如果要保留
选项
详细信息
中的所有项目,无论它们是否匹配():


您需要使用[]符号来推送详细信息值

options['groups']['details'] = true
options['groups']['category'] = false

这是解决你问题的办法

var详细信息=[
{id:'groups',option:true},
{id:'category',选项:false}
];
变量选项={
组:[
{id:'g1'},
{id:'g2'}
],
类别:[
{id:'c1'},
{id:'c2'}
],
其他:[
{id:'o1'},
{id:'o2'}
],
};
var组合={};

对于(var i=0;i请添加您尝试过的内容,以便我们可以帮助您解决所面临的问题。我想说您只有一个数组。@GerardoFurtado刚刚更新了这个问题,我自己并没有构建两个数组,它们来自外部api。这就是为什么我要基于这两个来构建一个数组。选项不是数组,而是对象我们的问题包含无效的代码。而您预期的
组合
数组不是有效数组。您应该在提问时花时间提问并展示您的努力,这是公平的,因为您正在寻求帮助。请阅读此内容-
var details = [
      { id: 'groups', option: true },
      { id: 'category', option: false }
]

var options = {
        groups: [ 
          { id: 'g1' },
          { id: 'g2' }
        ],
        category: [
          { id: 'c1' },
          { id: 'c2' }
        ],
        other: [
          { id: 'o1' },
          { id: 'o2' }
        ]
    }

var combined = {};
details.forEach(({id: id, option: option}) => {
  if (options[id]) {
    combined[id] = combined[id] || {};
    combined[id].options = options[id];
    combined[id].details = {option: option};
  }
})

console.log(JSON.stringify(combined, null, "\t"))
/*
{
  "groups": {
    "options": [
      {
        "id": "g1"
      },
      {
        "id": "g2"
      }
    ],
    "details": {
      "option": true
    }
  },
  "category": {
    "options": [
      {
        "id": "c1"
      },
      {
        "id": "c2"
      }
    ],
    "details": {
      "option": false
    }
  }
}
*/
var details = [
      { id: 'groups', option: true },
      { id: 'category', option: false }
]

var options = {
        groups: [ 
          { id: 'g1' },
          { id: 'g2' }
        ],
        category: [
          { id: 'c1' },
          { id: 'c2' }
        ],
        other: [
          { id: 'o1' },
          { id: 'o2' }
        ]
    }

var combined = {};

Object.keys(options).forEach(id => {
  combined[id] = {};
  combined[id].options = options[id];
})
details.forEach(({id: id, option: option}) => {
  combined[id] = combined[id] || {};
  combined[id].details = {option: option};
})

console.log(JSON.stringify(combined, null, "\t"))
/*
{
  "groups": {
    "options": [
      {
        "id": "g1"
      },
      {
        "id": "g2"
      }
    ],
    "details": {
      "option": true
    }
  },
  "category": {
    "options": [
      {
        "id": "c1"
      },
      {
        "id": "c2"
      }
    ],
    "details": {
      "option": false
    }
  },
  "other": {
    "options": [
      {
        "id": "o1"
      },
      {
        "id": "o2"
      }
    ]
  }
}
*/
options['groups']['details'] = true
options['groups']['category'] = false