誰かのJavaScriptの宿題
7519 ワード
友人は、私が以下の問題を解決する方法を私に尋ねました:
フォーム
私の最初のパスのために、私は
それが涼しく見えて、涼しく見えている間、現代のJavaScriptについての私のお気に入りのものは、このアプローチがループの中でループを呼ぶのに問題の何かを持っているので、ここでは、ストリングを横切ってポインタを歩いて、それが仕事セットに認める数を集めるより効率的なアプローチです.
それはクールに見えるほどではありませんが、それはおそらく長期的に良いです.
フォーム
"(1, 2, 3), (4, 5, 6), (7, 8, 9)"
に文字列を与え、フォーム[[1, 2, 3], [4, 5, 6], [7, 8, 9]]
の多次元配列に変換します.私の最初のパスのために、私は
Array.prototype.reduce()
とこのような2、3の正規表現で若干の楽しいShenanigansをしました.const listified = `(1, 2, 3), (4, 5, 6), (7, 8, 9), (5, junk, 100, 2eggs)`
.match(/\((.*?)\)/g)
.reduce(
(a, c) => [
...a,
[
...c
.match(/([0-9]+)(?=[ ,\)])/g)
.map((el) => !isNaN(el) && parseInt(el)),
],
],
[]
);
console.log(listified);
Demo on Replit.それが涼しく見えて、涼しく見えている間、現代のJavaScriptについての私のお気に入りのものは、このアプローチがループの中でループを呼ぶのに問題の何かを持っているので、ここでは、ストリングを横切ってポインタを歩いて、それが仕事セットに認める数を集めるより効率的なアプローチです.
// Convert strings of the form `"(1, 2, 3), (4, 5, 6), (7, 8, 9)"` into
// multidimensional arrays of the form `[[1, 2, 3], [4, 5, 6], [7,8,9]]`.
const listifiedTokens = (str) => {
let data = [];
let ws = [];
let x;
for (c of str) {
// Taking pains to prevent type-coercsion.
if (!isNaN(c)) {
x = x ? `${x}${c}` : c;
}
// Start a new work set and overwrite
// any existing work set.
if (c === "(") {
ws = [];
}
// ')' and ',' terminate a list entry,
// and x must be a number before we parse.
if ([")", ","].includes(c) && !isNaN(x)) {
ws = [...ws, parseInt(x, 10)];
}
// Report the work set.
if (c === ")") {
data = [...data, ws];
}
// Whenever c is NaN, we flush x
// because this only happens at the end
// of a valid list or when the list item
// contains an unsupported value.
if (isNaN(c)) {
x = undefined;
}
}
return data;
};
const str = `(1, 2, 3), (4, 5, 6), (7, 8, 8, 9), (100, 2egg, 5, bananas)`;
console.log(listifiedTokens(str));
Demo on Replit.それはクールに見えるほどではありませんが、それはおそらく長期的に良いです.
Reference
この問題について(誰かのJavaScriptの宿題), 我々は、より多くの情報をここで見つけました https://dev.to/365erik/listified-tokens-or-somebodys-javascript-homework-4heoテキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol