我有一個包含兩個句子的文本檔案,一個在第 1 行,另一個在第 2 行
示例:
第 1 行:foo 是黑色
第 2 行:樹皮
第 1 行和第 2 行的內容將放在一個陣列示例中:['The foo is black', 'The bar barks']
現在我將這兩個放在一個陣列中,我想遍歷陣列并將句子中的每個單詞連同它所在的行號一起放在物件內部。例子:
{
barks : 2 //line 2
black : 1 //line 1
foo: 1
bar: 2
is : 1
the : 1, 2
}
我該如何處理?我認為我可以遍歷陣列,然后將每個單詞添加到一個物件中,但輸出不一定必須在一個物件中,這只是我的想法。重要的是要注意輸出也必須按字母順序排序。
uj5u.com熱心網友回復:
我認為最好的方法是堅持使用一個陣列,你實際上可以對它進行排序(Map如果并且當你在多行上有相同的單詞時,這將被證明是困難的)。
看這個程序:
const data = ['The foo is black', 'The bar barks'];
let output = new Array();
data.forEach((i, line) => {
line ; // because line numbers start from 1
// split into words lowercase and include line number
const words = i.split(' ').map(j => j.toLowerCase()).map(text => ({
text,
line
}));
output.push(...words);
});
// sort alphabetically
output = output.sort((a, b) => ( (a.text > b.text) || -1));
console.log('Data sorted alphabetically with line numbers:', output);
uj5u.com熱心網友回復:
由于順序很重要,最終結果最好是成對陣列。由于一個單詞可能在同一個字串中出現多次,因此不僅要提及行號,還要提及該行中單詞的編號可能會很有趣:
function wordOccurrences(lines) {
const obj = {};
lines.forEach((lineStr, line) =>
lineStr.toLowerCase().match(/\S /g).forEach((wordStr, word) =>
(obj[wordStr] ??= []).push({line, word})
)
);
const result = Object.entries(obj).sort(([a], [b]) => a.localeCompare(b));
return result;
}
const result = wordOccurrences(['The foo is black', 'The bar barks']);
console.log(result);
uj5u.com熱心網友回復:
使用 a Map,您可以這樣做:
const lines = ['The foo is black', 'The bar barks'];
let wordCount = new Map();
for (let i = 0; i < lines.length; i ) {
const words = lines[i].split(' ');
for (const word of words) {
let count = wordCount.get(word.toLowerCase()) || [];
count.push(i 1);
wordCount.set(word.toLowerCase(), count);
}
}
wordCount = new Map([...wordCount.entries()].sort());
console.log(wordCount);
我相信這是最容易理解和最慣用的方法。
uj5u.com熱心網友回復:
我知道,已經有一個公認的答案。然而,這是我的看法。它將適用于尊重物件中鍵的插入順序的“現代”瀏覽器。該片段生成一個物件obj,其中單個單詞是鍵。它們按字母順序排列。關聯的值是包含關鍵字(單詞)出現的行號的陣列:
const str=`The foo is black
The bar barks
And the last 1 is stupid and has 12 words in it`;
obj=Object.fromEntries(
Object.entries(
str.toLowerCase().split("\n").reduce((a,line,i)=>{
line.split(/\s /).forEach(w=>(a[w]??={})[i 1]=1);
return a;
},{})
).sort(([a],[b])=>a.localeCompare(b)).map(([k,v])=>[k,Object.keys(v).map(k=> k)])
);
console.log(obj);
運算式.sort(([a],[b])=>a.localeCompare(b)).map(([k,v])=>[k,Object.keys(v).map(k=> k)])是操作的核心。它對整個物件的鍵進行排序,并將它們的值(最初也是具有字串型別鍵的物件)轉換回數字陣列。
轉載請註明出處,本文鏈接:https://www.uj5u.com/qiye/510107.html
