2017-05-31 59 views
-1

我想使用nodejs从json数组中删除元素。我的json文件match.json如下。使用Javascript删除json数组中的元素

[{"id":"1234","time":"3"}] 

从此我要删除的第一个元素,使JSON文件看起来是这样的:

[] 

我尝试下面的代码,它打印在控制台一个空数组,但它不是从match.json文件中删除元素

for(var i=0;i<w;i++) 
{ 
    for(var j=0;j<m;j++){ 
     if((words[i].id==match[j].id) && (words[i].time==match[j].time)) 
     { 
      var f1=0; 
      //var id1=match[j].id; 
      var linkadd=words[i].link; 
      delete match[j]; 
      console.log(match); 
     } 
    } 
} 
+1

看来你不承认JSON的真正目的:不直接字符串表示工作。您可以简单地通过*解析*来创建一个对象,然后您可以转换您的对象并*将它序列化回JSON。更容易,更不容易出错。 – Robert

+0

你总是想删除第一个元素 –

回答

0

使用match.splice(I,1)的代替删除匹配[I]

+0

我试过了,它在控制台上打印空白,但在文件中数据是剩余的。 – Gousia

+0

你是否正在用匹配数组重写你的文件? –

+0

它的工作,谢谢 – Gousia

0

这应该工作:

let myJsonString = '[{"id":"1234","time":"3"}]'; 
let myEditedJsonString = JSON.stringify(JSON.parse(myJsonString).shift()); 
0

以除去element..you可以使用接头。该元件将被去除。

{ 
     var f1=0; 
     //var id1=match[j].id; 
     var linkadd=words[i].link; 
     match.splice(i, 1); 
     console.log(match); 
    } 

如果使用delete match[i],列表变得[undefined]。所以使用拼接。

所以基本上删除不会删除元素,而是将元素设置为undefined。

0

const items = [{"id":"1234","time":"3"}] 
 

 
console.log('before removing item ==> ', items) 
 

 
items.splice(0 /*index to be removed*/, 1/*no. of items to be removed*/) 
 

 
console.log('after removing item ==> ', items)

0

如果你想永远拿出第一个元素,更新数组使用下面的代码。

var arr =[{"id":"1234","time":"3"}]

arr.reverse().pop()

如果你想获得该阵列的一个子集,你可以切片的阵列,但它不会更新数组,但创建一个新的阵列。

arr.slice(STARTING_ADDRESS,NO_OF_ELEMENTS_TO_SLICE)

注意:这将返回一个新的数组,所以,如果你想更新旧的阵列,那么你需要将其分配到旧数组。

arr = arr.slice(STARTING_ADDRESS,NO_OF_ELEMENTS_TO_SLICE)