我正在研究如何在JavaScript中使用生成器.
由于发电机返回迭代器,我想我可以使用它像iterable.filter()一样array.prototype.filter.
但是,iterable对象没有filter,map,forEach,reduce方法.
所以,我做了一个生成器版本的filter,map,reduce,forEach方法,如下所示.
'use strict';
function* range(n) {
for (let i = 1; i <= n; i++) {
yield i;
}
}
function* filter(context, predicate) {
for (let i of context) {
if (predicate(i) === true) {
yield i;
}
}
}
function isEven(value) {
return value % 2 === 0;
}
console.log(
...filter(range(10), isEven)
);
Run Code Online (Sandbox Code Playgroud)
这段代码确实有效,但filter(range(10), isEven)我想用它来代替range(10).filter(isEven).
有什么方法可以实现我想要的吗?
我正在研究ES6 Proxy,Reflect,但是嗯......我不确定这些ES6是否对我有所帮助.
range(10)
.filter(isEven) //generator version of filter
.map(multiplyBy5) //generator …Run Code Online (Sandbox Code Playgroud) 我正在研究如何使用 mongoDB。
我想更新文档的某个字段,但它会覆盖整个文档。如何只更新文档中我想要修改的字段?
db.products.find({_id: 1})
{
"_id" : 1.0,
"name" : "aaa",
"category" : "toy",
"price" : 100.0
}
Run Code Online (Sandbox Code Playgroud)
例如,我有一个这样的文档。
db.products.update({_id: 1}, {price:999})
db.products.find({_id: 1})
{
"_id" : 1.0,
"price" : 999.0
}
Run Code Online (Sandbox Code Playgroud)
当我像这样更新时,我得到这个结果。执行更新命令后,我丢失了名称字段和类别字段。
我想实现一个带有复选框的表格组件。我遇到的问题是,当我单击复选框时,表格行和表格单元格捕获我想避免的单击事件。当我单击复选框时,我只希望该复选框对更改事件做出反应。
我尝试了event.stopPropagation方法但不起作用。不知何故,在复选框捕获更改事件之前,当我单击该复选框时,包含该复选框的表格行和单元格会对单击事件做出反应。
我怎样才能实现我想要的?请帮我!!
<template>
<table>
<tr @click="trClick">
<td @click="tdClick">
<input @change="checkboxChange" type="checkbox">
</td>
</tr>
</table>
</template>
<script>
export default {
name: "HelloWorld",
methods: {
trClick() {
console.log("tr - click");
},
tdClick() {
console.log("td - click");
},
checkboxChange(e) {
e.stopPropagation();
console.log("checkbox - change");
}
}
};
</script>
<style>
table {
background: #cccccc;
width: 100%;
cursor: pointer;
}
input {
cursor: pointer;
}
</style>
Run Code Online (Sandbox Code Playgroud)
我希望这个 Vue 版本能够按我的预期工作。 https://codesandbox.io/s/pjxzvj9jvm
我只是在普通 JavaScript 中尝试了同样的事情,只是为了研究 JavaScript …