Поиск самых длинных строк в многомерном массиве в JavaScript - PullRequest
0 голосов
/ 29 октября 2018

let lists = ["Grocery", "Clothing", "Furniture"]; 
let items = [
  [
    "tomatoes",
    "cheese",
    "bread",
    "ham"
  ],
  [
    "shirt",
    "jacket",
    "jeans"
  ],
  [
    "sofa",
    "carpet",
    "bed"
  ]
]; 

Итак, у меня есть эти два массива. один, в котором массивы 'items' принадлежат каждому массиву списков. например, элементы [0] принадлежат спискам [0] и т. д.

чтобы попытаться получить самую длинную строку из массивов, которые я пробовал, но это не работает ....

let longestString = (list) => {
  lists[items.reduce((a, b) => a.length > b.length ? a : b)];
  }
 console.log('Clothing's longest item is: ${longestString("Clothing")}`)

Ответы [ 5 ]

0 голосов
/ 29 октября 2018

Вам нужно сначала найти индекс в lists, который соответствует данному list, а затем применить вызов reduce к этому конкретному подмассиву:

const lists = ["Grocery", "Clothing", "Furniture"]; 
const items = [["tomatoes", "cheese", "bread", "potatoes"], ["shirt", "jacket", "jeans"], ["sofa", "carpet", "bed"]]; 

const longestString = (list) => 
    items[lists.indexOf(list)].reduce((a, b) => a.length > b.length ? a : b);
console.log(`Clothing's longest item is: ${longestString("Clothing")}`)

Однако было бы лучше, если бы вы хранили имя списка и соответствующие элементы вместе :

const lists = {
    Grocery: ["tomatoes", "cheese", "bread", "potatoes"],
    Clothing: ["shirt", "jacket", "jeans"],
    Furniture: ["sofa", "carpet", "bed"]
}; 

const longestString = (list) => 
    lists[list].reduce((a, b) => a.length > b.length ? a : b);
console.log(`Clothing's longest item is: ${longestString("Clothing")}`)
0 голосов
/ 29 октября 2018

Попробуйте приведенный ниже фрагмент кода

let lists = ["Grocery", "Clothing", "Furniture"]; 
let items = [
  [
    "tomatoes",
    "cheese",
    "bread",
    "ham"
  ],
  [
    "shirt",
    "jacket",
    "jeans"
  ],
  [
    "sofa",
    "carpet",
    "bed"
  ]
];

lists.forEach( (category, index) => {   
  let longest = items[index].reduce(function (a, b) { 
         return a.length > b.length ? a : b; 
      });
 
 console.log(`${category}'s longest item is: ${longest}`); 
 });
0 голосов
/ 29 октября 2018

Вы можете отобразить массив, взяв массив строк в качестве результирующего набора.

var lists = ["Grocery", "Clothing", "Furniture"],
    items = [["tomatoes", "cheese", "bread", "potatoes"], ["shirt", "jacket", "jeans"], ["sofa", "carpet", "bed"]],
    result = items.map(a => a.reduce((r, v) => {
        if (!r || r[0].length < v.length) {
            return [v];
        }
        if (r[0].length === v.length) {
            r.push(v);
        }
        return r;
    }, undefined));

lists.forEach((l, i) => console.log(`${l}'s longest item${result[i].length === 1 ? ' is' : 's are'} ${result[i].join(', ')}.`));
console.log(result);
0 голосов
/ 29 октября 2018

let lists = ["Grocery", "Clothing", "Furniture"]; 
let items = [
  [
    "tomatoes",
    "cheese",
    "bread",
    "potatoes"
  ],
  [
    "shirt",
    "jacket",
    "jeans"
  ],
  [
    "sofa",
    "carpet",
    "bed"
  ]
]; 

var listsObj = lists.reduce( (obj, k, idx) => {
  obj[k] = items[idx].reduce( (res, i) => (res.length > i.length ? res : i), '' );
  return obj;
}, {} );

lists.forEach(k => console.log(`${k}'s longest item is: ${listsObj[k]}.`));

Надеюсь, это поможет вам!

0 голосов
/ 29 октября 2018

Это метод, который вы можете использовать для записи самой длинной строки в массиве

function findLongest(array) {
  var currentMax = "";
  for (string of array) {
      if (string.length > currentMax.length) {
          currentMax = string
      }
  }
  return currentMax;
}

затем, вы можете использовать эту функцию на каждом из массивов в «элементах». Я оставлю это тебе ^^

...