6

このホワイトボード チャレンジをオンラインで見ましたが、理解できないようです。ヘルプ!

入力として単語の配列を受け入れる関数を作成します。

関数は、標準的なアメリカの QWERTY キーボードの 1 行でのみアクセスできるアルファベット文字を使用して入力できるすべての単語の配列を返す必要があります。

例えば:

// given
let words = [ 'sup', 'dad', 'tree', 'snake', 'pet'];
keyboardWords(words);

// return
['dad', 'tree', 'pet'];

そして、これが私が得た距離です。

const topKeys = ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'];
const middleKeys = ['a', 's', 'd','f', 'g', 'h', 'j', 'k', 'l'];
const buttomKeys = ['z', 'x', 'c', 'v', 'b', 'n', 'm'];

let result = [];

let words = ['sup', 'dad', 'tree', 'snake', 'pet'];

for(let i in words) {
  let eachWord = words[i];

  eachWord.split('').forEach(function(c) {
    console.log(c);
  });

}

配列内の各単語を印刷するところまで来ましたが、単語内の各文字が単一の配列にあるかどうかを確認するために使用する方法が完全にはわかりません。

4

4 に答える 4

1

明らかに、これを行う方法はたくさんあります。私の最初の反応は、ハッシュ テーブルを作成することです。他のどれよりも優れているかどうかはわかりませんが、合理的に機能し、理解しやすく、ホワイトボードに書きやすいはずです。

const rows = [
  ['q', 'w', 'e', 'r', 't', 'y', 'u', 'i', 'o', 'p'],
  ['a', 's', 'd', 'f', 'g', 'h', 'j', 'k', 'l'],
  ['z', 'x', 'c', 'v', 'b', 'n', 'm']
];

// make a quick hash
const hash = rows.reduce((acc, row, i) => (row.forEach(letter => acc[letter] = i + 1), acc), {})
let words = ['sup', 'dad', 'tree', 'snake', 'pet', "4545", "", "PoWer", '0'];

let result = []

words.forEach(word => {
  if (!word) return                     // degenerate cases i.e  '', 0, etc.
  let row = hash[word[0].toLowerCase()]
  if (row == undefined) return          // not letters we know about
  for (let i = 1; i < word.length; i++) {
    if (hash[word[i].toLowerCase()] !== row) return
  }
  result.push(word)
})

console.log(result)

于 2018-04-11T02:17:08.143 に答える