Проверка, содержит ли массив строк ключи объекта - PullRequest
1 голос
/ 15 апреля 2020

У меня есть следующий объект:

{
  apple: 0,
  banana: 0,
  cherry: 0,
  date: 0,

and so on...
}

И массив строк, которые являются словами из кулинарной книги.

[0] => "the"
[1] => "apple"
[2] => "and"
[3] => "cherry"

и так далее ...

Я хотел бы перебирать массив строк и добавлять +1 каждый раз, когда вышеуказанные ключи упоминаются как строка? Я пытался использовать object.keys, однако не смог заставить его работать?

Это в node.js.

Ответы [ 3 ]

1 голос
/ 15 апреля 2020

Вы можете сделать что-то хорошее и простое, как это, которое будет увеличивать абсолютно все ключи из массива строк:

let ingredients = {
  apple: 0,
  banana: 0,
  cherry: 0,
  date: 0,
  // and more...
}

let arr = ["the","apple","and","cherry"]

// loop through array, incrementing keys found
arr.forEach((ingredient) => {
  if (ingredients[ingredient]) ingredients[ingredient] += 1;
  else ingredients[ingredient] = 1
})

console.log(ingredients)

Однако, если вы хотите только увеличить ключи в ingredients объекте, который вы установили , вы можете сделать это :

let ingredients = {
  apple: 0,
  banana: 0,
  cherry: 0,
  date: 0,
  // and more...
}

let arr = ["the","apple","and","cherry"]

// loop through array, incrementing keys found
arr.forEach((ingredient) => {
  if (ingredients[ingredient] !== undefined)
    ingredients[ingredient] += 1;
})

console.log(ingredients)
0 голосов
/ 15 апреля 2020

Вы можете упростить это, используя reduce.

const words = ["the", "apple", "and", "cherry"];

let conts = {
  apple: 0,
  banana: 0,
  cherry: 0,
  date: 0,
};
const result = words.reduce((map, word) => {
  if (typeof map[word] !== "undefined") map[word] += 1;
  return map;
}, conts);
console.log(result);
0 голосов
/ 15 апреля 2020

Другой способ справиться с этим, используя массив filter и some:

var fruits = {
  apple: 0,
  banana: 0,
  cherry: 0,
  date: 0,
};

const words = ["the", "apple", "and", "cherry"];

var filtered = words.filter(word => Object.keys(fruits).includes(word));
filtered.forEach(fruit => fruits[fruit] += 1);

// fruits
// {apple: 1, banana: 0, cherry: 1, date: 0}
console.log(fruits);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...