繁体   English   中英

使用数组值从Javascript关联数组中删除元素

[英]Remove element from Javascript associative array using array value

我试图从使用该值的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;
}

这样做的方法是使用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 = {};

第二个是首选,因为它更简洁一点。

我曾经写过一篇关于这篇文章的博客文章 ,看看你是否想要更多信息。

JavaScript本身没有“关联数组”这样的东西。 与此概念对应的数据结构只是一个JavaScript对象。

当然,JavaScript数组(基本上就像JavaScript中的所有内容)都是一个Object,但它具有附加功能。 所以你可以使用一个数组作为键值映射,但它确实不是正确的结构。

要从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".

你试过delete hash.someKey;

您可以为对象提供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)

我不是通灵者,所以我只能猜测你想要完成这样的事情:

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();

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM