在JavaScript中复制Python数组索引系统

时间:2017-11-06 07:06:42

标签: javascript python arrays

有没有办法在JavaScript中复制Python的数组索引系统。

要访问JavaScript中的最后一个元素,我需要这样做:

!important

有没有办法可以使用Python的方式访问元素,例如:

width:33%!important;

当你有一个数组数组时,这真的很烦人。

last = arr[arr.length - 1]
secondLast = arr[arr.length - 2]

有什么想法吗?我在网上看到的只允许arr.last或arr.last()使用Array.prototype。

4 个答案:

答案 0 :(得分:1)

没有。 JavaScript不支持运算符重载。但是,您可以自己实现一个支持Python索引处理的方法。

编辑:我想您可以使用Proxy(在ES6 +中)重新创建该效果,但我不推荐它:https://jsfiddle.net/DerekL/Lfjznnbb/

class PythonArray {
    constructor() {
        return new Proxy([], {
            get: function(target, name) {
                var index = parseInt(name, 10);

                if (name === NaN) {
                    if (name in target) return target[name];
                    else throw "Not a number";
                }

                // simple implementation
                if(index < 0)   return target[target.length + index];
                else    return target[index];
            }
        });
    }

    static from(arr){
        var pythonArray = new PythonArray();
        for(var i = 0; i < arr.length; i++){
            pythonArray[i] = arr[i];
        }
        return pythonArray;
    }
}

var arr = PythonArray.from([1, 2, 3]);
console.log(arr[0]);         // 1
console.log(arr[-1]);        // 3
console.log(arr.join("|"));  // still works

答案 1 :(得分:0)

您可以使用Object.defineProperty

尝试以下操作
Object.defineProperty(Array.prototype, "-1", {
  get : function(index){ return this[this.length - 1] ) }
});

这将返回-1的最后一个值,但我不认为可以定义通用值。

<强>演示

&#13;
&#13;
var arr = ["A", "B", "C"];
console.log( "Before " , arr[ -1 ] );
Object.defineProperty(Array.prototype, "-1", {
  get : function(index){ return this[this.length - 1]; }
});
console.log( "After " ,  arr[ -1 ] );
&#13;
&#13;
&#13;

同样,您可以为其他负面索引定义属性。

答案 2 :(得分:0)

数组也是对象。

let arrayObj = []
arrayObj[-1] = "I exist";
console.log(arrayObj) // [ '-1': 'I exist' ]

因此,使用array[-1]对于最后一个索引不是一个好主意;

相反,只需添加一个Prototype函数getFromLast()即可访问数组中最后一个元素

Array.prototype.getFromLast = function(index) {
    return this[this.length-index-1];
}
a = [1,23,123,4,1,1231,12]
a.getFromLast(3) // 4

答案 3 :(得分:-1)

您可以通过创建这样的函数来实现这一目标:

&#13;
&#13;
var some_array = ["name", "game", "fame"];

function getElement(array, index) {
  return (array[array.length + (index)]);
};

console.log(getElement(some_array, -1));
&#13;
&#13;
&#13;