javascript - 通过比较属性将第二个数组与第一个数组合并,如果对象不属于第二个数组,则将属性添加到第一个数组中的对象
问题描述
我有三个数组。Array1:字段,Array2:配置,Array3:defaultChartType
我需要将字段数组对象的“名称”属性与配置数组对象的“度量”进行比较。如果匹配,则应使用字段对象的标签更新配置对象。如果配置对象中不存在字段中的任何名称属性对象,则应将其作为新对象添加到配置数组中,其中包含 defaultchatType 对象。
fields.map((measure) => {
let Measures = [];
Measures = config.map((k) =>
k.measures.map((val) => {
if (measure.name.indexOf(val) < 0) return null;
return k;
})
);
console.log(Measures, 'measuresmeasures');
return null;
});
var defaultChartType={
type:"line",
line: {
color: '#00ADFF',
width: 4,
},
}
var fields= [
{
name: ['Book1History','Book1Projected'],
label: 'Book1',
},
{
name: ['Book2Projected'],
label: 'Book2',
},
{
name: ['Book3History','Book3Projected'],
label: 'Book3',
},
{
name: ['Book4'],
label: 'Book4',
}
]
var config= [
{
measures: ['Book1History', 'Book1Projected'],
type: 'line',
},
{
measures: ['Book2Projected'],
type: 'bar',
},
]
var expectedOutput=[
{
"measures": [
"Book1History",
"Book1Projected"
],
"type": "line",
"label": "Book1"
},
{
"measures": [
"Book2Projected"
],
"type": "bar",
"label": "Book2"
},
{
"measures": [
"Book3History",
"Book3Projected"
],
"label": "Book3",
"type": "line",
"line": {
"color": "#00ADFF",
"width": "4"
}
},
{
"measures": [
"Book4"
],
"label": "Book4",
"type": "line",
"line": {
"color": "#00ADFF",
"width": "4"
}
}
]
解决方案
首先使用过滤器,如果配置中的任何元素
measures
与names
.如果匹配将从
found
变量中取出类型并将其类型添加到输出,如果不是添加默认类型。
var defaultChartType={type:"line", line: { color: '#00ADFF',width: 4,},}
var fields= [{ name: ['Book1History','Book1Projected'], label: 'Book1', },{ name: ['Book2Projected'], label: 'Book2', }, { name: ['Book3History','Book3Projected'], label: 'Book3', }, { name: ['Book4'],label: 'Book4', } ]
var config= [{measures: ['Book1History', 'Book1Projected'],type: 'line',},{measures: ['Book2Projected'], type: 'bar', },]
let op = fields.map(ele=>{
let found = config.filter(({measures})=>{
return measures.every((el,index)=>{
return el === ele.name[index]
})
})
return{
...ele,
type: found.length ? found[0].type : defaultChartType
}
})
console.log(op)
推荐阅读
- c# - lerp 后相机不会立即完成更改位置
- javascript - 滚动页面时如何填充svg颜色?
- python - 如何对一堆变量求和?
- azure - 使用 bitbucket 管道在 netcore 3 中部署 Azure Functions
- ios - 具有不同目的地的 SwiftUI 导航栏项
- reactjs - React:使用 Material UI 实现保存、另存为、覆盖对话框流程
- typescript - 在同一项目中同时使用 date-fns 和 luxon 的正确修复
- angular - “对象”类型不存在属性“错误”。这不是“错误”吗?TS (2551)
- r - 为什么在这种情况下按变量着色不起作用?
- multithreading - 如何为线程选择优先级?