关于一个多数组组合的面试题 js

原始数据

const defaultselectList = [
	{
		attibutedid: '10001',
		attibuteSelected: ['大陆版', '港版']
	},
	{
		attibutedid: '10002',
		attibuteSelected: ['红', '白']
	},
	{
		attibutedid: '10003',
		attibuteSelected: ['32G', '16G']
	}
]
最终效果数据
    const result = [
      { "10001": '大陆版', '10002': '红', '10003': '32G' },
      { "10001": '大陆版', '10002': '白', '10003': '32G' },
      { "10001": '大陆版', '10002': '红', '10003': '16G' },
      { "10001": '大陆版', '10002': '白', '10003': '16G' },
      { "10001": '港版', '10002': '红', '10003': '32G' },
      { "10001": '港版', '10002': '白', '10003': '32G' },
      { "10001": '港版', '10002': '红', '10003': '16G' },
      { "10001": '港版', '10002': '白', '10003': '16G' }
    ]

对比很快能看出:(先从双数组分析,再进行多数组的)

  1. 对象中attibutedid 是key键,而attibuteSelected内的每个值是相对应的value值;
  2. 他们每个对象的会根据attibuteSelected,之间存在随机组合的关系;
    双数组,使用双重for循环实现数据的所有排列组合
  3. 每个对象生成的key-value是彼此拼接在一起的
    使用结构赋值实现数组对象属性的拼接组合

最后使用reduce 将每次的两两数组进行 拼接组合 生成最终的数据

-------直接上代码--------

 function reset(data,key,value) {
      //实现对象根据相应的key value 组装成数组
      function main(tempData) {
        let temp = []
        tempData[value].forEach((i, index) => {
          temp[index] = {}
          temp[index][tempData[key]] = i
        })
        return temp
      }
      //实现两个数组直接的随机组合
      function getValuesByArray(arr1, arr2) {
        var arr = [];
        for (var i = 0; i < arr1.length; i++) {
          var v1 = arr1[i];
          for (var j = 0; j < arr2.length; j++) {
            var v2 = arr2[j];
            var value = {...v1,...v2}
            arr.push(value);
          };
        };
        return arr;
      }
      //实现数组的累加
      let tempdatas= data.reduce(function(a,b,c){
        return [...getValuesByArray((a.length?a:main(a)),main(b))]
      })
      return tempdatas
    }
}
//进行调用
 console.log((reset(defaultselectList,'attibutedid','attibuteSelected')))

功能大概实现了!!有更好的方式欢迎 @小编 相互讨论

posted @ 2022-07-07 10:39  xiao旭  阅读(31)  评论(0编辑  收藏  举报