объединить второй массив с первым массивом путем сравнения свойств и добавить свойства к объектам в первом массиве, если объект не является частью второго массива - PullRequest
0 голосов
/ 16 января 2019

У меня есть три массива. Array1: поля, Array2: конфигурация, Array3: defaultChartType

Мне нужно сравнить атрибут «name» из объектов массива полей с «мерами» объекта массива config. Если совпадает, объект конфигурации должен быть обновлен с меткой поля объекта. Если какой-либо объект атрибута name из полей не существует в объекте config, его следует добавить в массив config как новый объект с объектом 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"
}
}
]

1 Ответ

0 голосов
/ 16 января 2019
  1. Сначала использую фильтр, и каждый раз, когда я вынимаю элемент из конфигурации, если любой из элементов из конфигурации measures совпадает с names.

  2. Если совпадения извлекают тип из переменной 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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...