2016-12-15 68 views
0

我有兩個數組在我的jQuery和我想要做的就是推動我的要求的格式第一陣列的數據到其他數組:比如下面是我的數組的給定:如何在jQuery中將數據推送到另一個數組中,而不將NAN附加到結果中?

var mine = [ 
{"new":"new"}, 
{"old":"old"} 
]; 

var mynew = []; 

現在我希望把我的mine陣列的數據以這種方式到mynew陣列。

jQuery.each(mine, function() { 
       jQuery.each(this, function (name, data) { 
        mynew.push({text: +"'"+name+"'"+ ', value: ' +"'"+data+"'"}); 
       }); 
      }); 

和我需要的輸出應該類似如下所示:

[ 
{text: 'new', value: 'new'}, 
{text: 'old', value: 'old'} 
] 

我這樣做是正確的,我認爲,但結果數據是某些東西一樣如下圖所示:

Object {text: "NaNnew', value: 'new'"} 

這顯然不是我想要的......任何人都可以爲我打印我想要的佈局嗎?

+0

開始時刪除'+「'」''。它充當一元運算符並嘗試將操作數轉換爲數字。 – sabithpocker

回答

0

在提問試試這個

jQuery.each(mine, function() { 
       jQuery.each(this, function (name, data) { 
        mynew.push({text: name , value: data }); 
       }); 
      }); 
+1

哇,拯救了我的整個一天兄弟的生活救星...再次感謝很多,真的很喜歡你的答案,因爲它的工作就像一個魅力....很好:) – laraib

+0

歡迎你,但請讓這個答案接受了! :) –

0

嘗試,

jQuery.each(mine, function() { 
     jQuery.each(this, function (name, data) { 
       mynew.push({ text: name, value: data}); 
     }); 
    }); 
+0

然後請接受它 – azad

0

NaN是評估+"'"的結果是試圖'轉換爲評估一元+操作員編號。也就是說,你 不必 不應該使用字符串連接這種方式創建對象!

{text: (+"'") + (name) + ("'") + (', value: ') + ("'") + (data) + ("'") } 
//{text: "NaName', value: 'data'"} 

這甚至不創造價值key,而不是僅僅有text鍵有長長的一串。


使用簡單的對象創建語法。

mynew.push({text:name, value:data}); 

如果您想將Object轉換爲字符串,以後總是可以使用JSON.stringify

1

問題與javascript

text: +"'"+name+"'"+ ', value: ' +"'"+data+"'" 

不需要加引號。您已經檢索到值data,在這種情況下,它是一個字符串。 name是數組當前元素的index,而不是值。您可以在javascript在問代以下線上面的一行

mynew.push({text:data, value:data}); 

注意使用該模式,嵌套調用$.each()沒有必要返回預期的結果。可以使用Array.prototype.map()Object.keys()

var mine = [ 
 
    {"new":"new"}, 
 
    {"old":"old"} 
 
]; 
 

 
var mynew = mine.map(function(obj) { 
 
    var value = obj[Object.keys(obj)[0]]; 
 
    return {text:value, value:value} 
 
}); 
 

 
console.log(mynew);

替代地使用.map(),對象解構,計算屬性,"new"屬性,其中new操作者是在javascript的保留字,箭頭功能

var mine = [ 
 
    {"new":"new"}, 
 
    {"old":"old"} 
 
]; 
 

 
var mynew = mine.map(({["new"]:n, old:o}) => ({text:(n||o), value:(n||o)})); 
 

 
console.log(mynew);

+1

爲什麼在使用'Array#map'時使用'$ .map'? https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Array/map – Punit

+0

@Punit好點。 – guest271314

-1

查看Array.filter的document。特別注意回調參數:

測試數組中每個元素的函數。用參數調用(元素,索引,數組)。返回true以保持元素,否則返回false。 因此,在你的情況下,ARR是元素(並且名字不好,因此你的困惑)。過濾循環你的數組,併爲它調用的每一個項目回調傳遞當前位置的元素作爲arr。

正如其他人在評論中指出的那樣,你的過濾器回調的邏輯實際上是負值的缺陷,但如果你知道你的數組永遠不會包含負值(但這可能是一個問題危險的假設)。

而且,當然,在內部,這是通過你的數組循環。你不能過濾你的(未分類的)數組而不觸及數組中的每個元素。查看鏈接中的polyfil以瞭解它可能的工作原理(可能是因爲這是一個實現細節,可能會因不同的JavaScript引擎而有所不同,但無疑會涉及到某個循環),它循環遍歷數組,調用回調(注意參數),如果回調函數返回true,它會被推送到結果數組中。

相關問題