我正在尝试使用该值从Javascript关联数组中删除元素以找到它,但我遇到了麻烦。我尝试过splice和JQuery的grep方法,但对我来说都没有。这就是我现在所拥有的。
var array_path = new Array();
function bulk_upload(){
var temp_array = new Object();
for (var i = 1; i<8; i++){
temp_array[i] = $('#path' + i).val();
if(temp_array[i]!='' && temp_array[i]!=null){
array_path['path' + i] = $('#path' + i).val();
}
}
process_txt();
}
function process_txt(){
//alert(array_path.indexOf(full_path)); //returns nothing
var removed_element = array_path.splice(getKey(array_path), 1);
//array_path = $.grep(array_path, function(val) { return val != full_path; });
alert(removed_element);//return nothing, just blank alert box
}
function getKey(data) {
for (var prop in data)
return prop;
}
答案 0 :(得分:12)
执行此操作的方法是使用delete
运算符。
delete array_path[getKey(array_path)]
在JavaScript中,几乎所有内容都来自Object.prototype
。 JavaScript是一种开放的动态语言,允许您通过简单的赋值创建/修改对象的属性。这与关联数组 - 包含键控值的结构非常相似。
在引擎盖下,数组只是一个从Array.prototype
下降的对象,带有数字键和一个名为length
的特殊属性。 length
属性只返回一个大于最高数字属性的属性。本质上,Array
是一个具有不同语义的对象。
如果您想要一个关联数组,那么Array
不是您想要的对象。您可能希望直接从Object
下降。有两种方法可以执行此操作,您可以使用new
运算符或空对象文字。两者的语法如下:
var o = new Object();
var o = {};
第二个是首选,因为它更简洁一点。
我前一段时间写了一篇blog post,看看你是否想了解更多信息。
答案 1 :(得分:7)
JavaScript本身没有“关联数组”这样的东西。与此概念对应的数据结构只是一个JavaScript对象。
当然,JavaScript数组(基本上与JavaScript中的所有内容)都是一个对象,但具有其他功能。所以你可以使用一个数组作为键值映射,但它实际上并不是正确的结构。
要从Object中删除键,您只需执行以下操作:
var myObj = {};
var myKey = "blah";
myObj[myKey] = 1234; // Adds or updates value for "blah" to 1234.
delete myObj[myKey]; // Removes key-value pair for "blah".
答案 2 :(得分:2)
您是否尝试过delete hash.someKey;
?
答案 3 :(得分:1)
您可以为对象提供remove方法,或者使用apply或call来使用其他对象的remove方法(如果已定义)。
function myObj(members){
for(var p in members) this[p]= members[p];
}
myObj.prototype.remove= function(val){
for(var p in this){
if(this[p]=== val) delete this[p];
}
return this;
}
myObj.prototype.toString= function(){
var A= [];;
for(var p in this){
if(this.hasOwnProperty(p)){
A.push(p+':'+this[p])
}
}
return '{'+A.join(', ')+'}';
}
var O= new myObj({a: 1, b: 10, c: 100});
alert(O)
O.remove(10);
alert(O)
答案 4 :(得分:0)
我不是通灵者,所以我只能猜测你想要完成这样的事情:
var paths = [];
function getPaths() {
for(var i = 1; i < 8; ++i) {
var value = $('#path' + i).val();
if(value) paths.push(value);
}
}
function process() {
var firstPath = paths.shift();
// do stuff
}
getPaths();
if(paths.length) process();