小编shu*_*shu的帖子

有什么办法可以将filter方法应用于自定义迭代器吗?

我正在研究如何在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)

javascript

6
推荐指数
1
解决办法
115
查看次数

如何更新文档而不覆盖现有文档?

我正在研究如何使用 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)

当我像这样更新时,我得到这个结果。执行更新命令后,我丢失了名称字段和类别字段。

mongodb

4
推荐指数
1
解决办法
6873
查看次数

当复选框输入更改时如何停止事件传播?

描述

我想实现一个带有复选框的表格组件。我遇到的问题是,当我单击复选框时,表格行和表格单元格捕获我想避免的单击事件。当我单击复选框时,我只希望该复选框对更改事件做出反应。

我尝试了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.js 版本

我希望这个 Vue 版本能够按我的预期工作。 https://codesandbox.io/s/pjxzvj9jvm

普通 JavaScript 版本。

我只是在普通 JavaScript 中尝试了同样的事情,只是为了研究 JavaScript …

vue.js vue-component vuejs2

3
推荐指数
1
解决办法
4094
查看次数

标签 统计

javascript ×1

mongodb ×1

vue-component ×1

vue.js ×1

vuejs2 ×1