Фильтрация объекта на основе частичного совпадения строк в JavaScript - PullRequest
1 голос
/ 01 мая 2019

Я пытаюсь отсортировать этот объект JavaScript, чтобы возвращались только определенные строки, объект:

const baseHeroes = [
  { name: "Batman", powers: ["Strength", "Intelligence"] },
  { name: "Superman", powers: ["Strength", "Flying"] },
  { name: "Spiderman", powers: ["Spider Sense", "Webs"] },
  { name: "The Flash", powers: ["Speed"] },
  { name: "Captain America", powers: ["Strength", "Shield"] },
];

Я хочу вернуть только те строки, которые имеют силу "Сила" в разделе мощностей,но чтобы вернуть полную строку со всеми данными, поэтому я хотел бы иметь это когда закончите:

const strongHeroes = [
  { name: "Batman", powers: ["Strength", "Intelligence"] },
  { name: "Superman", powers: ["Strength", "Flying"] },
  { name: "Captain America", powers: ["Strength", "Shield"] },
];

Любая помощь будет принята с благодарностью.

Ответы [ 3 ]

2 голосов
/ 01 мая 2019

Array.filter ваш друг здесь. Наряду с этим .includes также является вашим другом:

const baseHeroes = [
  { name: "Batman", powers: ["Strength", "Intelligence"] },
  { name: "Superman", powers: ["Strength", "Flying"] },
  { name: "Spiderman", powers: ["Spider Sense", "Webs"] },
  { name: "The Flash", powers: ["Speed"] },
  { name: "Captain America", powers: ["Strength", "Shield"] },
];

const results = baseHeroes.filter( h => h.powers.includes('Strength') );

console.log(results);

Есть и другие вещи, о которых вы могли бы подумать, например, чувствительность к регистру и возможность того, что .powers будет иметь значение null или что-то иное, чем массив, но это должно дать вам общее представление о том, как это сделать.

1 голос
/ 01 мая 2019

Я чрезвычайно новичок в JavaScript, но, похоже, работает следующее.

const strongHeroes = [];

const baseHeroes = [
  { name: "Batman", powers: ["Strength", "Intelligence"] },
  { name: "Superman", powers: ["Strength", "Flying"] },
  { name: "Spiderman", powers: ["Spider Sense", "Webs"] },
  { name: "The Flash", powers: ["Speed"] },
  { name: "Captain America", powers: ["Strength", "Shield"] },
];

for (var i = 0; i < baseHeroes.length; i++) {
    if (baseHeroes[i].powers.indexOf("Strength") != -1) {
        strongHeroes.push(baseHeroes[i]);
    }
}

По сути, он просматривает исходный массив, и если полномочия содержат строку «Сила», он возвращает местоположение начала Сила, а если он не находит его, возвращает -1. Поэтому, если мы находим Силу в силах, переместите этот массив в новый массив.

0 голосов
/ 01 мая 2019

Вы можете сделать что-то вроде этого:

Array.prototype.containsPattern = function(elem)
{
var results = [];
for (var i in this)
{
    if (this[i].toString().includes(elem))
    {
            results.push(this[i]);
    }
}

return results;
}
var fruits = ["Banana", "Orange", "Apple", "1,Mango", "2,Mango"];

var n = fruits.containsPattern("Mango");

В этом случае эта функция вернет: 1, Манго, 2, Манго. И самое приятное, что вы можете настроить функцию так, чтобы она делала все, что вы хотите.

Надеюсь, это поможет, ура.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...