Oliver Eyton-Williams ee1e8abd87
feat(curriculum): restore seed + solution to Chinese (#40683)
* feat(tools): add seed/solution restore script

* chore(curriculum): remove empty sections' markers

* chore(curriculum): add seed + solution to Chinese

* chore: remove old formatter

* fix: update getChallenges

parse translated challenges separately, without reference to the source

* chore(curriculum): add dashedName to English

* chore(curriculum): add dashedName to Chinese

* refactor: remove unused challenge property 'name'

* fix: relax dashedName requirement

* fix: stray tag

Remove stray `pre` tag from challenge file.

Signed-off-by: nhcarrigan <nhcarrigan@gmail.com>

Co-authored-by: nhcarrigan <nhcarrigan@gmail.com>
2021-01-12 19:31:00 -07:00

3.2 KiB
Raw Blame History

id, title, challengeType, videoUrl, dashedName
id title challengeType videoUrl dashedName
8d1323c8c441eddfaeb5bdef 创建一个Set类 1 create-a-set-class

--description--

在接下来的几个练习中我们将创建一个函数来模拟一个名为“Set”的数据结构。 Set类似于数组但不能包含重复值。 Set的典型用途是简单地检查项目是否存在。这可以用对象实现例如

var set = new Object;
set.foo = true;
//看看我们的集合中是否存在foo
console.logset.foo// true

在接下来的几个练习中我们将从头开始构建一个全功能的Set。对于本练习只要该值中尚不存在该值就创建一个将值添加到set集合的函数。例如

this.add = functionelement{
//一些代码来为集合添加值
}

如果成功添加该值,则该函数应返回true否则返回false

--hints--

您的Set类应该有一个add方法。

assert(
  (function () {
    var test = new Set();
    return typeof test.add === 'function';
  })(),
  'Your <code>Set</code> class should have an <code>add</code> method.'
);

您的add方法不应添加重复值。

assert(
  (function () {
    var test = new Set();
    test.add('a');
    test.add('b');
    test.add('a');
    var vals = test.values();
    return vals[0] === 'a' && vals[1] === 'b' && vals.length === 2;
  })(),
  'Your <code>add</code> method should not add duplicate values.'
);

成功添加值后, add方法应返回true

assert(
  (function () {
    var test = new Set();
    var result = test.add('a');
    return result != undefined && result === true;
  })(),
  'Your <code>add</code> method should return <code>true</code> when a value has been successfully added.'
);

add重复值时, add方法应返回false

assert(
  (function () {
    var test = new Set();
    test.add('a');
    var result = test.add('a');
    return result != undefined && result === false;
  })(),
  'Your <code>add</code> method should return <code>false</code> when a duplicate value is added.'
);

--seed--

--seed-contents--

class Set {
  constructor() {
    // Dictionary will hold the items of our set
    this.dictionary = {};
    this.length = 0;
  }

  // This method will check for the presence of an element and return true or false
  has(element) {
    return this.dictionary[element] !== undefined;
  }

  // This method will return all the values in the set
  values() {
    return Object.values(this.dictionary);
  }

  // Only change code below this line
  
  // Only change code above this line
}

--solutions--

class Set {
  constructor() {
    this.dictionary = {};
    this.length = 0;
  }

  has(element) {
    return this.dictionary[element] !== undefined;
  }

  values() {
    return Object.values(this.dictionary);
  }

  add(element) {
    if (!this.has(element)) {
      this.dictionary[element] = element;
      this.length++;
      return true;
    }

    return false;
  }

  remove(element) {
    if (this.has(element)) {
      delete this.dictionary[element];
      this.length--;
      return true;
    }

    return false;
  }

  size() {
    return this.length;
  }
}