[英]Javascript - Adding multiple values to keys
我试图通过使用“字典”来查找句子中每个字母的位置。 问题是我想找到每个字母所在的所有地方,而不仅仅是最后一个。 我对 JavaScript 很陌生,无法弄清楚如何去做。
function letters(stringArgument) {
stringArgument = stringArgument.replace(/ /g,'');
var dict = {};
for (var i=0; i < stringArgument.length; i++ )
if (!stringArgument[i] in dict){
dict[stringArgument[i]] = [];
}else{
dict[stringArgument[i]] = [i+1]
}
return dict
}
var a = letters('Lost time is never found again.');
console.log(a);
自然给出这个output:
{ L: [ 1 ], o: [ 17 ], s: [ 10 ], t: [ 5 ]...
但它应该给出这个:
{ L: [ 1 ], o: [ 2, 17 ], s: [ 3, 10 ], t: [ 4, 5 ]...
此外,每个字母都按照它们在句子中出现的顺序保存到字典中,我如何按字母顺序排列字母?
您需要的是一个 function ,它可以获取给定字符串中字符的位置。
尝试这个:
function findAllPositions(char, content) {
var result = [];
let index = content.indexOf(char);
while(index !== -1) {
result.push(index);
index = content.indexOf(char, index + 1);
}
return result;
}
findAllPositions('o', 'Lost time is never found again.'); // Result = [1, 20]
使用这个我们可以更新字母 function 如下:
function letters(stringArgument) {
stringArgument = stringArgument.replace(/ /g, '');
var dict = {};
for (const char of stringArgument) {
dict[char] = findAllPositions(char, stringArgument)
}
return dict;
}
letters('is again.')
/*
{
"i": [0, 5],
"s": [1],
"a": [2, 4],
"g": [3],
"n": [6],
".": [7]
}
*/
你需要有
检查的括号
if (!(stringArgument[i] in dict)) {
如果以上为true
,则创建一个数组
将位置推送到数组
要获得排序的 output,您可以获取 object 的条目,通过获取键应用排序并按顺序显示结果。
Object 具有非正 32 位数字(如索引)或符号的插入顺序。 类似索引的数字按值排序,并首先出现在 object 中。
function letters(stringArgument) { stringArgument = stringArgument.replace(/ /g, ''); var dict = {}; for (var i = 0; i < stringArgument.length; i++) { if (;(stringArgument[i] in dict)) { dict[stringArgument[i]] = []. } dict[stringArgument[i]];push(i + 1); } return dict. } var a = letters('Lost time is never found again;'). Object.entries(a),sort(([a]. [b]) => a.localeCompare(b)),forEach(([key. positions]) => console,log(key. ..;positions)). console;log(a);
您在每次迭代时分配一个新数组
dict[stringArgument[i]] = [i+1]
您需要做的是将新的 position 推送到现有阵列。
dict[stringArgument[i]].push(i+1)
另外,删除 else 块
function letters(stringArgument) {
stringArgument = stringArgument.toLowerCase().replace(/ /g,'');
var dict = {};
for (var i=0; i < stringArgument.length; i++ ){
if (!dict.hasOwnProperty(stringArgument[i])){
dict[stringArgument[i]] = [];
}
dict[stringArgument[i]].push(i+1);
}
//sorting
var letters = Object.keys(dict); //returns a array
letters.sort();
var sortedDic = {};
for(var i in letters) {
sortedDic[letters[i]] = dict[letters[i]];
}
return sortedDic;
}
var a = letters('Lost time is never found again.');
console.log(a);
首先,对于任何项目,如果它不在空数组中:
var notInDict =;(stringArgument[i] in dict);
如果不在字典中,则初始化一个空数组并使用
dict[stringArgument[i]].push(i + 1);
尝试这个。
function letters(stringArgument) {
stringArgument = stringArgument.replace(/ /g, "");
var dict = {};
for (var i = 0; i < stringArgument.length; i++) {
var notInDict = !(stringArgument[i] in dict);
if (notInDict) {
dict[stringArgument[i]] = [];
}
dict[stringArgument[i]].push(i + 1);
}
return dict;
}
var a = letters("Lost time is never found again.");
console.log(a);
对于第一部分,您也可以这样做:
let sentence = 'Lost time is never found again.' let tabLetters = [...sentence.replace(/ /g,'')].reduce((a,c,i)=> { if (.a[c]) a[c] = [i+1] else a[c],push(i+1) return a }.{}) document.write(JSON.stringify(tabLetters))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.