好的,我试图访问此数组内部字符串中的每个单独的数字。
var array = ['818-625-9945','999-992-1313','888-222-2222','999-123-1245'];
var str = "";
for (i=0; i<array.length; i++) {
str = array[i];
}
问题是这是输出:'999-992-1313'
而不是第一个元素数组[0]:'818-625-9945'
当我尝试使用嵌套的for循环来遍历字符串中的每个元素时,我无法说明这些元素。
var array = ['818-625-9945','999-992-1313','888-222-2222','999-123-1245'];
for (i=0; i<array.length; i++) {
for (j=0; j<array[i].length; j++) {
console.log(array[i][j]);
}
}
我不知道如何访问字符串数组[i]中的每个单独的数字。我想找到一种方法来制作一个计数器,这样如果我遇到数字'8',我会在总分上加8,所以我可以得到每个单独的字符串元素的总和,看看哪个数字的总和最高。
var array = ['818-625-9945','999-992-1313','888-222-2222','999-123-1245'];
for (i=0; i<array.length; i++) {
for (j=0; j<array[i].length; j++) {
if (array[i](j).indexOf('8') !== -1) {
// add one to total score
// then find a way to increase the index to the next index (might need help here also please)
}
}
}
答案 0 :(得分:1)
Mabe这适合你。它使用了Array.prototype.reduce()
,Array.prototype.map()
和String.prototype.split()
。
此提议通过给定数组进行识别并拆分每个字符串,然后使用'8'
检查来过滤得到的数组。返回的数组作为计数并添加到前一次迭代reduce
的返回值 - 并返回。
var array = ['818-625-9945', '999-992-1313', '888-222-2222', '999-123-1245'],
score = array.reduce(function (r, a) {
return r + a.split('').filter(function (b) { return b === '8'; }).length;
}, 0);
document.write('Score: ' + score);
建议的方法,计算每个字符串上的所有'8'
:
var array = ['818-625-9945', '999-992-1313', '888-222-2222', '999-123-1245'],
score = array.map(function (a) {
return a.split('').filter(function (b) { return b === '8'; }).length;
});
document.write('Score: ' + score);
答案 1 :(得分:0)
实际上重读你的问题让我更清楚你想要什么。您只需要计算并检索每个字符串的8个数,以及数组中的哪个索引符合此最大值8。此函数检索在数组中找到值的索引,找到8的次数以及此结果的字符串值。 (或者在你给出一个空数组的情况下返回一个空对象)
您可以轻松地执行以下操作:
'use strict';
var array = ['818-625-9945', '999-992-1313', '888-222-2222', '999-123-1245'];
function getHighestEightCountFromArray(arr) {
var max = 0,
result = {};
if (arr && arr.forEach) {
arr.forEach(function(value, idx) {
var cnt = value.split('8').length;
if (max < cnt) {
// found more nr 8 in this section (nl: cnt - 1)
max = cnt;
// store the value that gave this max
result = {
count: cnt - 1,
value: value,
index: idx
};
}
});
}
return result;
}
console.log(getHighestEightCountFromArray(array));
这里唯一的一点是,当找到相同数量的计数时,它仍将使用找到的第一个计数,在这里你可以决定哪个“最大” 应该是首选(数组中的第一个,或数组中的最新/最新的一个)
<强> OLD 强>
我不确定你缺少哪些款项,但你可以通过以下方式完成。
我首先遍历数组中的所有项,然后使用String.prototype.split函数将单个数组项拆分为一个数组,然后包含['818','625','9945' ]。然后对于每个值,您可以重复相同的样式,nl:拆分您正在接收的值,然后遍历所有单个值。然后使用Number.parseInt转换为数字,然后将所有值一起计算。
有更短的方式,但这是你如何做到这一点
'use strict';
var array = ['818-625-9945','999-992-1313','888-222-2222','999-123-1245'],
sumPerIndex = [],
totalSum = 0;
array.forEach(function(item, idx) {
var values = item.split('-'), subArray = [], itemSum = 0;
values.forEach(function(value) {
var singleItems = value.split(''),
charSum = 0;
singleItems.forEach(function(char) {
charSum += parseInt(char);
});
itemSum += charSum;
subArray.push(charSum);
console.log('Sum for chars of ' + value + ' = ' + charSum);
});
sumPerIndex.push(subArray);
totalSum += itemSum;
console.log('Sum for single values of ' + item + ' = ' + itemSum);
});
console.log('Total sum of all elements: ' + totalSum);
console.log('All invidual sums', sumPerIndex);