有没有办法在JavaScript中复制Python的数组索引系统。
要访问JavaScript中的最后一个元素,我需要这样做:
!important
有没有办法可以使用Python的方式访问元素,例如:
width:33%!important;
当你有一个数组数组时,这真的很烦人。
last = arr[arr.length - 1]
secondLast = arr[arr.length - 2]
有什么想法吗?我在网上看到的只允许arr.last或arr.last()使用Array.prototype。
答案 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(Array.prototype, "-1", {
get : function(index){ return this[this.length - 1] ) }
});
这将返回-1
的最后一个值,但我不认为可以定义通用值。
<强>演示强>
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;
同样,您可以为其他负面索引定义属性。
答案 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)
您可以通过创建这样的函数来实现这一目标:
var some_array = ["name", "game", "fame"];
function getElement(array, index) {
return (array[array.length + (index)]);
};
console.log(getElement(some_array, -1));
&#13;