我正在编写一个简单的计算器,可以在任意时间限制为100个节点的HTML页面上添加连续的数字流。
我可以选择当前页面上的节点:
var els = document.querySelectorAll('span.class');
var len = els.length;
arr = [];
for (var i=0; i < len; i++) {
var no = els[i].innerHTML;
arr.push(no);
}
console.log(no);
这是我一直在探索的内容,也许你可以建议一种更简单或改进的方法?
1. Select values, push into an array. 2. Store array in a cookie, or htmllocalstorage 3. every 5 seconds, push new values into 2nd array. 4. Read 1st array and compare to 2nd array. 5. create new array. sum values. store new array.
我一直无法将值与循环进行比较。 2个具有重叠值的数组是否存在拼接功能?
在下面的示例中,所需的数组将是: [1,2,3,2,1,8,7]
var arr1 = ['1','2','3','2','1'];
var arr2 = ['3','2','1','8','7']; // the first two values are now truncated off because current line is 102
var arr3 = [];
for(i=0; i<arr1.length; i++)
{
for (j=0; j<arr2.length; j++)
{
// number exists in both arrays
// next number is next index
if (arr1[i] == arr2[j] && arr1[i+1] == arr2[j+1] && arr1[i+2] == arr2[j+2])
{
arr3.push(arr1[i]);
//console.log(arr1[i]+ ' '+arr2[j] + 'true ' + arr1[i+1] + ' ' + arr2[j+1]+ arr1[i+2] + ' ' + arr2[j+2]);
}
else
{
//arr3 = [];
//console.log(arr1[i]+ ' '+arr2[j] + ' false');
}
}
}
var end = arr3[0]-1;
var arr4 = arr1.slice(0,end);
var arr5 = arr4.concat(arr2);
//console.log(arr5);
var total=0;
for (k=0;k<arr5.length; k++)
{
total += parseInt(arr5[k]);
}
console.log(total);
答案 0 :(得分:1)
看起来您正试图在第二个数组的开头删除重叠元素。
也许你可以比较子字符串而不是数组元素。
考虑这些字符串
var input1 = "1,2,3,2,1";
var input2 = "3,2,1,8,7";
如果你可以创建一个循环来生成子串“3,2,1”,你可以直接替换输入并删除前3个数字来获得这个字符串“8,7”
连接字符串并执行获取数组所需的操作。
答案 1 :(得分:1)
您可以通过将从第一个数组末尾开始的值与第二个数组中的相应值进行比较来完成此操作。如果公共块(示例中为['3','2','1']
)完全匹配,也就是说第二个数组中的前n(= chunk.length
)值和第一个数组中的最后n个值相同,然后你可以连接两个数组以获得重叠的结果。
function overlap(a, b) {
var counter = a.length - 1;
var startingIndex = b.indexOf(a[counter]);
while (b[--startingIndex] == a[--counter]) {}
if (startingIndex == -1) {
return a.slice(0, counter + 1).concat(b);
} else {
return a.concat(b);
}
}