我的应用程序有五个输入,我想在最终数字中计算每个输入的总和。
到目前为止,我做到了这一点:
const input1 = document.querySelector("#text1");
const input2 = document.querySelector("#text2");
const input3 = document.querySelector("#text3");
const input4 = document.querySelector("#text4");
const input5 = document.querySelector("#text5");
function setObservable(selector) {
return Rx.Observable
.fromEvent(selector, "input")
.map(event => parseInt(event.target.value))
.startWith(0)
}
const input$ = setObservable(input1)
const input2$ = setObservable(input2)
const input3$ = setObservable(input3)
const input4$ = setObservable(input4)
const input5$ = setObservable(input5)
const source = Rx.Observable.combineLatest(input$, input2$, input3$, input4$, input5$)
source.subscribe(value => {
const totalHTML = document.querySelector(".total");
const total = value.reduce((acc, curr) => acc + curr, 0);
totalHTML.textContent = total;
});
哪种工作正常...但是有没有更优雅的方法来获取每个输入的值而不指定所有输入?
答案 0 :(得分:0)
当然!让我们将所有选择器存储在一个数组中:
const selectors = ['#text1', '#text2', '#text3', '#text4', '#text5'];
让我们映射这些以获得实际元素:
const elements = selectors.map(s => document.querySelector(s));
现在让我们映射这些元素并获得一组Observables:
const clickStreams = elements.map(setObservable);
最后我们可以结合最新的(就像你之前做的那样):
const click$ = Rx.Observable.combineLatest(clickStreams);