【问题标题】:how to push data in array if there is data in another array如果另一个数组中有数据,如何将数据推送到数组中
【发布时间】:2014-10-21 10:56:35
【问题描述】:

好的,我知道这对某些人来说可能很简单,但我尝试了几个小时,直到现在都没有成功。

如果我在这个数组中有数据

var tDataValues = {
    id: "TenantID",
    text: "FullName",
    username: "Username",
    cnic: 'CNIC'
}

我将这个变量发送给函数

commonSelect2Templating(selector,url,tDataValues,minInputLength,placeholder);

注意:我正在使用 Jquery Select2(如果它可以帮助我理解问题,请分享。)

然后在结果部分的那个函数中我试图分配值

    results: function(data, page) {
        var newData = [];
        var length = data.length + 1;
        for(var i = 0; i<=length; i++){

        }
        $.each(data, function (index,value) {
            newData.push({
                id: value[tDataValues.id],  //id part present in data
                text: value[tDataValues.text]  //string to be displayed
            });
        });
        return { results: newData };
    }

这是来自服务器的数据:

[{"TenantID":"13","FullName":"Rameez Hassana","Username":"Rameez","CNIC":"16141-6321136-1"},{"TenantID":"14","FullName":"Syed Haider Hassan","Username":"pakistanihaider","CNIC":"17301-5856870-1"},{"TenantID":"15","FullName":"Demo Tenant No 1","Username":"tn1","CNIC":"15165-6156685-6"}]

解决问题: 现在所有的魔法都在这里发生。

$.each(data, function (index,value) {
    newData.push({
        id: value[tDataValues.id],  //id part present in data
        text: value[tDataValues.text]  //string to be displayed
    });

它告诉代码哪个是 id 哪个是文本,它工作得非常好。

现在这里的问题是我要创建的功能是 select2 的通用功能, 如果我有更多来自 db 的值,就像现在我从数据库中获取如何进行循环并将这些值一一设置到其适当的上下文中一样。 例如 tDataValues 持有 fieldName cnic 并且服务器正在发送 fieldName CNIC 那么如何创建一个循环,如果 cnic 两者都存在,那么它应该简单地分配,

我可以手动完成

newData.push({
cnic: value[tDataValues.cnic]

        });

但是像这样它不能是一个通用的功能。

我不能简单地提出如何实现这一点的逻辑。确实尝试了几个小时,但到目前为止没有成功:(

【问题讨论】:

  • tDataValues 是一个对象,而不是一个数组。

标签: javascript jquery arrays jquery-select2


【解决方案1】:

试试:

for(var key in tDataValues) {
    newData.push({ key: value[tDataValues[key]]});
}

更新:

然后先创建一个对象,然后推送到数组中:

for(var key in tDataValues) {
  var obj = {};
  obj[key] = value[tDataValues[key]];
  newData.push(obj);
}

【讨论】:

  • 谢谢,这是一个非常棒的答案,太棒了,因为当我尝试使用console.log(key+' : '+value[tDataValues[key]]); 之类的console.log 输出时,它显示了非常具体的数据,但问题是使用newData.push({ key: value[tDataValues[key]]}); 它不' t 获取其索引的键值,它只是将键设置为静态,我在结果中得到了这个。 [{"key":"13"},{"key":"Rameez Hassana"},{"key":"Rameez"},{"key":"16141-6321136-1"},{"key":"14"},{"key":"Syed Haider Hassan"},{"key":"pakistanihaider"},{"key":"17301-5856870-1"},{"key":"15"},{"key":"Demo Tenant No 1"},{"key":"tn1"},{"key":"15165-6156685-6"}]
  • 我需要对你的代码做些小改动,我的问题就解决了。你真棒。谢谢你。非常感谢再次感谢。
【解决方案2】:

检查一下,希望对你有帮助

  var mainData =[{"TenantID":"13","FullName":"Rameez Hassana","Username":"Rameez","CNIC":"16141-6321136-1"},{"TenantID":"14","FullName":"Syed Haider Hassan","Username":"pakistanihaider","CNIC":"17301-5856870-1"},{"TenantID":"15","FullName":"Demo Tenant No 1","Username":"tn1","CNIC":"15165-6156685-6"}];

var newData =[];

for(var i =0;i<mainData.length;i++){ 
    for(var key in mainData[i]) { 
        var tempObj ={}; 
        tempObj[key] = mainData[i][key];
        newData.push(tempObj);
    }   
}

输出是:[{"TenantID":"13"},{"FullName":"Rameez Hassana"},{"Username":"Rameez"},{"CNIC":"16141-6321136-1" },{"TenantID":"14"},{"FullName":"Syed Haider Hassan"},{"用户名":"pakistanihaider"},{"CNIC":"17301-5856870-1"},{" TenantID":"15"},{"FullName":"Demo Tenant No 1"},{"Username":"tn1"},{"CNIC":"15165-6156685-6"}]

【讨论】:

  • 感谢您的回复,但我认为您没有正确回答我的问题,我不想指定CNICFullName,我希望使用循环自动选择它,@artm 给了真的很好的答案,但我仍然得到关键错误。我希望你明白我想要达到的目标..
  • @SizzlingCode 嘿,我已经编辑了我的答案,请检查我现在是否有你的问题。谢谢:)
  • 非常感谢,但我尝试并意识到我得到的输出不正确。我想要的输出是这个。 [{"TenantID":"13","FullName":"Rameez Hassana","Username":"Rameez","CNIC":"16141-6321136-1"},{"TenantID":"14"},{"FullName":"Syed Haider Hassan"},{"Username":"pakistanihaider"},{"CNIC":"17301-5856870-1"}]
猜你喜欢
  • 2019-01-28
  • 1970-01-01
  • 1970-01-01
  • 2017-06-22
  • 2020-02-01
  • 1970-01-01
  • 2017-09-19
  • 1970-01-01
  • 2017-03-02
相关资源
最近更新 更多