Сравните свойства объекта по ключам в JavaScript - PullRequest
0 голосов
/ 16 октября 2019

Я пытаюсь сравнить свойства объекта по ключу. Вот некоторые примеры данных:

const data = [{
    "name": "John",
    "value": "30"
}, {
    "name": "Cindy",
    "value": "50"
}, {
    "name": "Mathew",
    "value": "80"
}, {
    "name": "Mike",
    "value": "35"
}];

, поэтому я хотел бы сравнить значения свойств (значения) имен Джона и Майка (ключ). Если значение Mike отличается от John, измените значение Mike на значение John. Существует некоторый алгоритм

data.map(obj => {
  for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
      let johnValue;
      let mikeValue;

      if(obj[key] == 'John') {
        johnValue = Number(obj.value)
      }
      else if(obj[key] == 'Mike') {
        mikeValue = Number(obj.value)
      }

      if(johnValue != mikeValue) {
        newData = {
          ...data,
          "Mike":  johnValue
        } 
      }
    }
  }
})

, после выполнения которого я ожидал данные типа

const data = [{
        "name": "John",
        "value": "30"
    }, {
        "name": "Cindy",
        "value": "50"
    }, {
        "name": "Mathew",
        "value": "80"
    }, {
        "name": "Mike",
        "value": "30"
    }];

Есть ли способ написать их лучше, используя некоторые функции ES6? Fiddle

1 Ответ

2 голосов
/ 16 октября 2019

Да, вы можете сделать это немного короче

const MikeRecordInd = data.findIndex(v => v.name === 'Mike')
const JohnRecord = data.find(v => v.name === 'John')

if (data[MikeRecordInd].value !== JohnRecord.value) {
  newData = [...data]
  newData[MikeRecordInd] = { name: 'Mike', value: JohnRecord.value }
} 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...