Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/393.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有扩展JavaScript对象数组的方法?_Javascript - Fatal编程技术网

有没有扩展JavaScript对象数组的方法?

有没有扩展JavaScript对象数组的方法?,javascript,Javascript,在JavaScript中,您可以使用prototype扩展对象的功能 Person.prototype.fullName = function () { return this.first + this.last; }; 我经常遇到需要在一系列特定对象上处理某些内容的场景。在这些情况下,最好将功能链接到该对象类型,而不是仅仅作为数组参数传递。我知道扩展JavaScript数组是不明智的 是否存在扩展对象数组功能的等效标准?下面是我的意思的一个伪例子: Person(Array).pro

在JavaScript中,您可以使用prototype扩展对象的功能

Person.prototype.fullName = function () {
    return this.first + this.last;
};
我经常遇到需要在一系列特定对象上处理某些内容的场景。在这些情况下,最好将功能链接到该对象类型,而不是仅仅作为数组参数传递。我知道扩展JavaScript数组是不明智的

是否存在扩展对象数组功能的等效标准?下面是我的意思的一个伪例子:

Person(Array).prototype.groupByAges = function () {
    // logic here that would group by ages
    // { '0-15': [person, person], '16-18': [person, person], etc. }

    return list;
};

// could be used like this
const list = persons.groupByAges();
我所尝试的:

  • 编写函数,如
    getAgeGroupsByPerson(arr)
    ,最终会使代码变得混乱
  • JQuery.grep()
    和JavaScript
    arr.map()
    ,它们有帮助,但不会将功能链接到特定的对象类型

  • 注意:我意识到可能有更好的方法逻辑地解决我所描述的特定年龄分组问题。这只是一个例子来说明我的观点。谢谢。

    我看到两种不同的方法可以满足您的要求

    1) 编写一个扩展数组的类并将数组粘贴在其中

    class MyArray extends Array {
      groupByAge() {
        console.log(this);
      }
    }
    
    
    let a = MyArray.from([1,2,3]);
    a.groupByAge();
    
    2) 编写一个普通函数,它接受对象数组并对其进行处理

    function groupByAge(array) {
       console.log(this);
    }
    
    尝试扩展一个新的数组函数要比同时进行上述两项工作做得更多。如果JS类不是您可以利用的东西,那么我建议使用该函数并将其称为“everywhere”


    这两种方法的优点是它们都很容易测试,这是我们想要的。

    我看到两种不同的方法可以满足您的需求

    1) 编写一个扩展数组的类并将数组粘贴在其中

    class MyArray extends Array {
      groupByAge() {
        console.log(this);
      }
    }
    
    
    let a = MyArray.from([1,2,3]);
    a.groupByAge();
    
    2) 编写一个普通函数,它接受对象数组并对其进行处理

    function groupByAge(array) {
       console.log(this);
    }
    
    尝试扩展一个新的数组函数要比同时进行上述两项工作做得更多。如果JS类不是您可以利用的东西,那么我建议使用该函数并将其称为“everywhere”


    这两种方法的优点是它们都很容易测试,这正是我们想要的。

    您可以装饰您的
    阵列

    让装饰=(数组)=>{
    array.groupByAges=函数(){
    log(`Grouping=${this}`);
    }  
    返回数组;
    }
    
    装饰([1,2,3])。groupByAges()
    您可以装饰您的
    阵列

    让装饰=(数组)=>{
    array.groupByAges=函数(){
    log(`Grouping=${this}`);
    }  
    返回数组;
    }
    
    装饰([1,2,3])。groupByAges()
    是否正在查找此
    Array.prototype.groupByAges=function(){}
    其中
    是对当前数组的引用。扩展现有javascript对象是一个诱人的想法,但这可能会导致各种问题,我建议您创建一个新类,其原型共享数组的prototype@GetOffMyLawn yes@Varinder如果我可以创建一个共享数组原型的类,那么如何使该类共享数组原型?可能类似于:
    MyArrayLikeClass.prototype=new array()
    然后是
    MyArrayIkeClass.prototype.someMethod=function(){}
    您是否正在寻找此
    Array.prototype.groupByAges=function(){}
    其中
    是对当前数组的引用。扩展现有javascript对象是一个诱人的想法,但这可能会导致各种问题,我建议您创建一个新类,其原型共享数组的prototype@GetOffMyLawn yes@Varinder如果我可以创建一个共享数组原型的类,那么如何使该类共享数组原型?可能类似于:
    MyArrayLikeClass.prototype=new array()
    然后
    MyArrayLikeClass.prototype.someMethod=function(){}