Javascript 比较两个数组并将0添加到缺少的元素

Javascript 比较两个数组并将0添加到缺少的元素,javascript,Javascript,我被一个嵌套数组卡住了。我需要用海图画一张图 我能够按照图形的要求转换数据。但是,我需要用另一个数组列表检查转换后的数组列表中是否存在公司名称,该数组列表由一个静态元素组成,如['BCM','CGRLH','HMS','Insurance']。正如您所看到的,有时每个对象中的垂直数组由一个或两个元素组成 示例:第一个obj消耗在垂直数组中得到3个元素,在数据属性中得到3个元素。我想将0添加到结果数组中的所有数据属性。类似于[1,2,0,4],因为缺少“HMS”。请让我知道我如何才能做到这一点 A

我被一个嵌套数组卡住了。我需要用海图画一张图

我能够按照图形的要求转换数据。但是,我需要用另一个数组列表检查转换后的数组列表中是否存在公司名称,该数组列表由一个静态元素组成,如['BCM','CGRLH','HMS','Insurance']。正如您所看到的,有时每个对象中的垂直数组由一个或两个元素组成

示例:第一个obj消耗在垂直数组中得到3个元素,在数据属性中得到3个元素。我想将0添加到结果数组中的所有数据属性。类似于[1,2,0,4],因为缺少“HMS”。请让我知道我如何才能做到这一点

API响应:

const categoriesWise = [
  {
    vertical: 'BCM',
    total: '297',
    values: [
      {
        keyword: 'Attrition',
        countOfKeyword: 24
      },
      {
        keyword: 'Backlog',
        countOfKeyword: 6
      },
      {
        keyword: 'Complaince',
        countOfKeyword: 12
      }
    ]
  }, 
  {
   vertical: 'CGRLH',
    total: '300',
    values: [
      {
        keyword: 'Attrition',
        countOfKeyword: 20
      },
      {
        keyword: 'Backlog',
        countOfKeyword: 10
      },
      {
        keyword: 'Complaince',
        countOfKeyword: 14
      }
    ]
  },
  {
   vertical: 'HMS',
    total: '250',
    values: [
      {
        keyword: 'Backlog',
        countOfKeyword: 16
      },
      {
        keyword: 'Complaince',
        countOfKeyword: 11
      }
    ]
  }
]

VueJS中的API数据转换代码

formatCategoryWiseChartData(categoriesWise) {
      const data = [];
      const result = [];
      for (let i = 0; i < categoriesWise.length; i += 1) {
        const total = categoriesWise[i].total;
        categoriesWise[i].values.forEach((e) => {
          data.push({ name: e.keyword, data: [(e.countofkeyword * 100) / total], vertical: [categoriesWise[i].verticalName] });
        });
      }
      data.forEach((item) => {
        const existing = result.filter((resultItem) => resultItem.name === item.name);
        if (existing.length) {
          const existingIndex = result.indexOf(existing[0]);
          result[existingIndex].data.push(...item.data);
          result[existingIndex].vertical.push(...item.vertical);
        } else {
          result.push(item);
        }
      });
      console.log('result reached --->', result);
      return result;
    },

您可以获取一个静态元素数组,并将值分配给同一个索引

var categoriesWise=[{vertical:'BCM',total:'297',值:[{keyword:'Attrition',countOfKeyword:24},{keyword:'Backlog',countOfKeyword:6},{keyword:'complicence',countOfKeyword:12}},{vertical:'CGRLH',total:'300',值:[{{keyword keyword Attrition:'Attrition',countOfKeyword 20},{keyword Backlog:'Backlog,{keyword:'Complaince',countOfKeyword:14}},{vertical:'HMS',total:'250',值:[{keyword:'Backlog',countOfKeyword:16},{keyword:'Complaince',countOfKeyword:11}],
静态值=['BCM'、'CGRLH'、'HMS'、'Insurance'],
result=categoriesWise.reduce((r,{vertical,total,values})=>{
forEach({keyword:name,countOfKeyword})=>{
var temp=r.find(q=>q.name==name);
如果(!temp)r.push(temp={name,数据:staticValues.map(=>0),垂直:[…staticValues]});
临时数据[staticValues.indexOf(垂直)]=countOfKeyword*100/总计;
});
返回r;
}, []);
console.log(结果);

.as控制台包装{最大高度:100%!重要;顶部:0;}
在数据有帮助之前,您应该更正输出或描述以使其相互适合,即使在阅读了您的问题3次之后,我还是不理解,或者其中存在多个错误,请检查now@MeetSingh上面的代码不会产生您所输入的结果。我们如何帮助您修复我们不知道但我们知道的算法另一个不相关吗?如果问题只是比较两个数组并将0添加到缺少的元素,那么代码中必须有
If(something)push.element
。尝试添加
else push(0)
If(something)push.(number)else push(0)
const result = [
  {
    name: 'Attrition',
    data: [1, 2, 3],
    vertical: ['BCM', 'CGRLH', 'Insurance']
  },
  {
    name: 'Backlog',
    data: [1, 2, 3, 4],
    vertical: ['BCM', 'CGRLH', 'HMS', 'Insurance']
  },
  {
    name: 'Complaince',
    data: [1],
    vertical: ['Insurance']
  }
]