функция javascript для поиска свойства объекта и возвращаемого значения - PullRequest
0 голосов
/ 23 ноября 2018

У меня есть строка: const phrase = "there is a blue bird in the forest";

и объект:

const color = {
'blue': 20,
'red': 10,
'yellow': 5
};

Я хочу написать функцию Javascript, которая проверяет, содержит ли строка какое-либо из свойств цветаobject и, если так, вернуть значение для свойства matched, поэтому в приведенном выше примере оно вернет 20.

Я использую Lodash и не могу понять, как написать эту функцию (_.some, _.find?)

Ответы [ 8 ]

0 голосов
/ 24 ноября 2018

Вы также можете использовать обработчик String.replace внутри Array.reduce на цветах, которые нужно использовать для каждого из них, и рассчитать итоговую сумму.

const data = "blue and red bird with blue feathers"
const color = { 'blue': 20, 'red': 10, 'yellow': 5 }

const result = Object.keys(color).reduce((r, k) => 
  (data.replace(new RegExp(k, 'g'), () => r += color[k]), r), 0)

console.log(result)  // 50 since it has 2 "blue" and 1 "red"
0 голосов
/ 23 ноября 2018

Если вам нужно получить общее значение всех цветов в строке, вы можете использовать Array.reduce() (или * lodash _.reduce()).Измените фразу на нижний регистр, разделите ее пробелами, уменьшите и возьмите сумму значения цвета (или 0 для других слов):

const color = {
  'blue': 20,
  'red': 10,
  'yellow': 5
};

const getColorsValue = (p) =>
  p.toLowerCase()
   .split(/\s+/)
   .reduce((s, w) => s + (color[w] || 0), 0);

console.log(getColorsValue('there is a blue bird in the forest')); // 20

console.log(getColorsValue('there is a blue bird in the red forest')); // 30
0 голосов
/ 23 ноября 2018

Также можно использовать Array.flatMap и Array.split

const phrase = "there is a blue bird in the forest";

const color = {
'blue': 20,
'red': 10,
'yellow': 5
};

let res = phrase.split(' ').flatMap(d => color[d] || [])

console.log(res[0] || 'No color is present')
0 голосов
/ 23 ноября 2018

Это должно вам помочь!

const phrase = "there is a blue bird in the forest";
const color = { 'blue': 20, 'red': 10, 'yellow': 5 };

const phraseValues = phrase.split(' ');
const colorValues = Object.keys(color)

const isKeyPresent = !!_.intersection(phraseValues , colorValues).length
0 голосов
/ 23 ноября 2018

Попробуйте Библиотека Underscore.js ._.where(list, properties)

0 голосов
/ 23 ноября 2018

Мы можем достичь этого, используя JavaScript Object.keys () и .find ()

const phrase = "there is a blue bird in the forest";
const color = { 'blue': 20, 'red': 10, 'yellow': 5 };

const result = color[Object.keys(color).find(v => phrase.indexOf(v) !== -1)];

console.log(result); // 20
0 голосов
/ 23 ноября 2018

Использование js:

const phrase = "there is a blue bird in the forest";
    
const color = { 'blue': 20, 'red': 10, 'yellow': 5 };
    
let key = Object.keys(color).find(color => phrase.includes(color));
    
if(key) console.log(color[key]);
0 голосов
/ 23 ноября 2018

Это будет полезно для вас, проверьте это или найдите код ниже: https://dustinpfister.github.io/2017/09/14/lodash-find/

var db_array = [

{
    name : 'Dave',
    sex : 'male',
    age : 34
},

{
    name: 'Jake',
    sex : 'male',
    age : 22
},

{
    name :'Jane',
    sex : 'female',
    age : 27
}


],

// find dave
q = _.find(db_array, {name:'Dave'});

console.log(q); // {name:'Dave',sex:male,age:34}
...