2016-12-15 34 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,它会被推送到结果数组中。

相关问题