[removed] filter() for Objects

前端 未结 16 972
心在旅途
心在旅途 2020-11-22 15:23

ECMAScript 5 has the filter() prototype for Array types, but not Object types, if I understand correctly.

How would I implemen

16条回答
  •  萌比男神i
    2020-11-22 15:45

    Never ever extend Object.prototype.

    Horrible things will happen to your code. Things will break. You're extending all object types, including object literals.

    Here's a quick example you can try:

        // Extend Object.prototype
    Object.prototype.extended = "I'm everywhere!";
    
        // See the result
    alert( {}.extended );          // "I'm everywhere!"
    alert( [].extended );          // "I'm everywhere!"
    alert( new Date().extended );  // "I'm everywhere!"
    alert( 3..extended );          // "I'm everywhere!"
    alert( true.extended );        // "I'm everywhere!"
    alert( "here?".extended );     // "I'm everywhere!"
    

    Instead create a function that you pass the object.

    Object.filter = function( obj, predicate) {
        let result = {}, key;
    
        for (key in obj) {
            if (obj.hasOwnProperty(key) && !predicate(obj[key])) {
                result[key] = obj[key];
            }
        }
    
        return result;
    };
    

提交回复
热议问题