2016-07-03 1 views
0

Я хочу, чтобы сравнить data.examples объекта массива name.value свойства значения с wcObject.notCoveredList ключом, если ключевые матчами я хочу нажмите все согласованные значения из wcObject для отображения массива в пользовательском интерфейсе. Если ключ не соответствует, я хочу, чтобы значение name.desc значение объекта массива data.examples, которое должно быть нажато удалениене указано текст в конце.Сравните массив объектов по свойству с ключом другого объекта

data = { 
     examples : [ 
      { 
      name: { 
       value:"someOne", 
       desc: "some random word not covered" 
      }, 
      type: { 
       value:"General", 
       desc:"General" 
      } 
      }, { 
      name: { 
       value:"secondOne", 
       desc: "second on in the queue not covered" 
      }, 
      type: { 
       value:"General", 
       desc:"General" 
      } 
      }, { 
      name: { 
       value:"thirdOne", 
       desc: "third one from the last not covered" 
      }, 
      type: { 
       value:"General", 
       desc:"General" 
      } 
      } 
     ] 

     } 

wcObject = { 
    notCoveredList : [ 
     { someOne: "anyone can start " }, 
     { secondOne: "second One cannot start" }, 
     { thirdOne: "third One can be allowed" } 
    ] 
    } 
+0

Упрощение лучше. Не существует интереса ни к вложенным примерам данных, ни к notCoveredList в wcObject. Вы должны изменить это –

+0

То, о чем вы просите, не имеет смысла, я думаю. Позвольте мне повторить это вам и посмотреть, можете ли вы исправить себя или меня, где лежит недоразумение ... »для каждого примера: если name.value соответствует ключевому объекту объекта в wcObject.notCoveredList, нажмите его в выходной массив - - если он не соответствует ключу, обрезайте «не покрытый» с конца имени example.desc и нажмите «вместо этого». Причина в том, что это не имеет смысла, так это то, что если вы обрезаете «не покрытый» от конца, то, что вы в основном делаете, толкает то же самое, что и name.value, так как name.value === name.desc + ' не распространяется'. –

+0

Извините @kyle Baker, позвольте мне исправить это. Значение name.desc может быть любым текстом, который не был закрыт в конце. – sridev9

ответ

0

Таким образом, этот код:

  1. создает объект фильтра. Мы захватываем все ключи wcObject.notCoveredList и делаем их ключами на одном объекте (с неопределенным значением), чтобы мы могли искать эти ключи с помощью одного вызова hasOwnProperty() вместо итерации по массиву, когда нам нужно для фильтрации.
  2. Карты каждого члена массива data.examples либо его собственному name.desc собственности, либо [лишены «не покрыты»] name.value.

.

wcNotCoveredKeys = wcObject.notCoveredList.reduce((memo, item) => { 
    // value is empty for all, we only care about keys. 
    memo[Object.keys(item)[0]] = undefined; 
    return memo; 
}, {}) 

// having built up our lookup table of those not covered, we continue: 
forUI = data.examples.map(example => { 
    if (wcNotCoveredKeys.hasOwnProperty(example.name.value)) { 
    return example.name.value; 
    } 
    else { 
    notCoveredString = example.name.desc; 
    cutOutIndex = notCoveredString.indexOf(' not covered'); 
    return notCoveredString.slice(0, cutOutIndex) 
    } 
}); 

(обновлена ​​интеграция строки нарезка)

Просто чтобы быть ясно: если вы удалили второй пункт из wcObject.notCoveredList, то на выходе вы получите в forUI (данный пример структуры данных/вы предоставили) будет

["someOne", "second on in the queue", "thirdOne"]

 Смежные вопросы

  • Нет связанных вопросов^_^