[英]How to Append Value to an Array from Input Text in Javascript?
我发现 DOM 操作很棘手。 我写了一个 function ,它在一个数组上使用过滤器方法,其中的数字可以被 2 整除。
function evenNums
有效。 我想使用push()
方法将输入文本字段中的数字推送到数组中,并在页面上显示来自 function evenNums
的结果。
HTML
<!DOCTYPE html>
<html>
<head> </head>
<body>
<label for="text">Enter Text</label>
<input id="myText" type="text" />
<input type="radio" />
<label for="function">Function 1</label>
<input type="radio" />
<label for="function">Function 2</label>
<button id="btn">Click Me</button>
<div id="result"></div>
<script src="array.js"></script>
</body>
</html>
忽略单选按钮。 这是我的 Javascript
const inputBtn = document.getElementById("btn")
const myText = document.getElementById("myText")
const result = document.getElementById("result")
//function 1 filter method on array.
const nums = [1,2,3];
const answer = nums.filter(evenNums);
function evenNums(nums) {
if (nums%2 == 0) {
return nums
}
}
result.innerHTML = answer;
console.log(nums) // original array
console.log(answer) // array using filter method
//How do I push a value from the user to the array?
inputBtn.addEventListener ("click", function() {
nums.push(myText.value);
myText.value ='';
evenNums(nums);
});
这就是我已经走了多远。 如何将用户的值推送到数组并在页面上显示? 我接近了吗?
感谢你的帮助!
您所做的几乎是正确的,只需确保在单击按钮时调用filter
并设置textcontent
。 该value
也是一个字符串,您必须对其进行parseInt()
才能进行偶数/奇数计算。 使用textcontent
而不是innerHTML
也更安全。
const inputBtn = document.getElementById("btn") const myText = document.getElementById("myText") const result = document.getElementById("result") const nums = [1, 2, 3]; inputBtn.addEventListener("click", function() { nums.push(parseInt(myText.value)); myText.value = ''; const answer = nums.filter(evenNums); function evenNums(nums) { if (nums % 2 == 0) { return nums } } result.textContent = answer; });
<label for="text">Enter Text</label> <input id="myText" type="text" /> <button id="btn">Click Me</button> <div id="result"></div>
只是一个旁注: filter()
期望 boolean 作为return
值,您的过滤器工作的原因是因为您return nums
被视为真值。
这应该更好。
const nums = [1, 2, 3]; const answer = nums.filter(evenNums); function evenNums(nums) { if (nums % 2 == 0) { return true; } } console.log(answer);
您可以将过滤器简化为。
const nums = [1,2,3]; const answer = nums.filter(n => n % 2 === 0); console.log(answer);
因为 ( x === y
) 返回 boolean。
简短的回答是。
const inputBtn = document.getElementById("btn") const myText = document.getElementById("myText") const result = document.getElementById("result") const nums = [1, 2, 3]; inputBtn.addEventListener("click", function() { nums.push(parseInt(myText.value)); myText.value = ''; result.textContent = nums.filter(n => n % 2 === 0); });
<label for="text">Enter Text</label> <input id="myText" type="text" /> <button id="btn">Click Me</button> <div id="result"></div>
好像你在正确的轨道上。 将用户的输入推送到数组后,可以通过设置innerHTML
属性在页面上显示过滤后的数组结果。
仅单独调用 function 不会为您做任何事情。
document.getElementById("result").innerHTML = nums.filter(evenNums);
以下是如何在点击时推送和过滤偶数。
var numberEl = document.getElementById("number"); var buttonEl = document.getElementById("button"); var numbers = []; buttonEl.addEventListener("click", function () { numbers.push(parseInt(numberEl.value, 10)); numbers = numbers.filter(isEven); console.log(numbers); numberEl.value = ""; }); function isEven (x) { return x % 2 === 0; }
<input id="number" type="number"> <button id="button">Push</button>
看起来您认为传递给filter
function 的evenNums
function 将整个nums
数组视为一次,而每个数字一个接一个。 为了帮助您了解我的意思,这里是filter
器在引擎盖下的作用。
function filter (xs, predicate) {
var ys = []; // new array
var n = xs.length;
for (let i = 0; i < n; i++) {
if (predicate(xs[i])) {
ys.push(xs[i]);
}
}
return ys;
}
predicate
参数是您的evenNums
function。 如您所见,它需要一个数字作为参数,因此您应该将evenNums(nums)
重命名为evenNum(num)
。 因此,当您调用filter(nums, evenNum)
时, predicate(xs[i])
变为evenNum(nums[i])
。
此外,您似乎认为您可以一次性调用filter
,但每次将新元素推送到数组时都必须调用它。 一旦数组被过滤,你必须用新数组覆盖旧数组,根据这种模式xs = filter(xs, predicate)
(在本机 JS 中转换为xs = xs.filter(predicate)
)。
function isEven (x) {
return x % 2 === 0;
}
> | numbers = [1, 2, 3, 4]
< | [1, 2, 3, 4]
> | isEven(numbers[0])
< | false
> | isEven(numbers[1])
< | true
> | evenNumbers = filter(numbers, isEven)
< | [2, 4]
> | evenNumbers.push(3)
< | 3
> | evenNumbers
< | [2, 4, 3]
> | evenNumbers = filter(evenNumbers, isEven)
< | [2, 4]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.