【问题标题】:how to update an array object in javascript by changing input value?如何通过更改输入值来更新 javascript 中的数组对象?
【发布时间】:2016-06-25 12:27:22
【问题描述】:

我想在 Javascript 中更新一个对象数组,为此我添加了一个 Fiddle。

Updated FIDDLE

有人可以指导我吗?

提前致谢

我的小提琴代码:

var category_number = 0;
var my_data = [
  {
    url: "/some/url/some_model_name.js?columns%5Bcategory_id%5D=" + category_number,  // This variable should change from updateData function
    hash_number_1: 1  
  },
  {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_2: 2
  },
  {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_3: 3
  },
  {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_4: 4
  },
  {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_5: 5
  },
];

var updateData = function() {
  var my_value = document.getElementById('my_value').value;
  if (my_value == 1) {
    category_number = 5;
  } else if (my_value == 2) {
    category_number = 1;
  } else if (my_value == 3) {
    category_number = 7;
  }
  // This category_number should update the my_data Array Object
  console.log(category_number);
  //my_data.push

  // Here is my question. Can I make the category_number to a global variable and change or any other neat way to do it?

}
$(document).on('change', '#my_value', updateData);

/* This function load once and I want the my_data change to applicable to the below function */
(function() {
    //$.each(my_datas, function(i, my_data) {
    //my_data.show_function = function() {
        //if .....
      console.log('final function');
    //}
  //}
})();

这是我的问题。我可以将 category_number 设置为全局变量并进行更改或任何其他巧妙的方法吗?

预期结果:

更新my_data第一个对象的url category_number。

例如:如果input value is 3,那么url: "/some/url/some_model_name.js?columns%5Bcategory_id%5D=7"

【问题讨论】:

  • “这个 category_number 应该更新 my_data 数组对象” 数组应该如何更新?
  • 这就是我更新数组哈希的地方。我更新了问题。
  • 你的小提琴缺少报价 ln: 15
  • 好吧,按照你的要求,我可以给你这个:jsfiddle.net/Jorrex/6ygnb4r1/2 - 更多关于updating the array hash 的意思的信息可能会有用,因为只有 1 个包含对象的数组.
  • category_number 应该如何影响数组?您能否向我们提供您期望的结果?这似乎不是宇宙中最艰巨的任务,但我严重无法理解你需要做什么。此外,您的小提琴中有一个错字,您缺少"。这是固定的:jsfiddle.net/MWadX/402

标签: javascript jquery arrays hash


【解决方案1】:

像这样:

  var my_data = [
  {
    url: "/some/url/some_model_name.js?",
    params: "columns%5Bcategory_id%5D=5",
    hash_number_1: 1  
  },
  {
    url: "/some/url/some_model_name.js?",
    params: "",
    hash_number_2: 2
  }
];

如果 category_number 数字发生变化,您可以遍历数组并更改每个字段,其中

var updateData = function() {
...
my_data[0]['params'] = "columns%5Bcategory_id%5D=" + category_number;
...
}

如果你需要url,你就这样构建它

my_data[index][url] + my_data[index][params]

由于我不知道你的应用会做什么,你也可以简单地更新第一个数组元素的 url?

【讨论】:

  • 谢谢。对的,这是可能的。但它只会更新第一个对象的url?我希望其他 url 应该和现在一样。
  • 是数组中唯一的对象,它的 url 会随着 category_number 的变化而变化,还是会有其他数组字段也发生变化?
  • 只是第一个对象,我不想更改任何其他对象。通过输入值变化更新第一个对象 url。
  • 谢谢@jacksbox。我会在我的应用中尝试这个,然后再回复你。
  • 我在页面刷新时加载了一个函数。是否有可能该函数在变量更改后获取 my_data 变量而不再次调用该函数?
【解决方案2】:

你也可以试试这个?

var category_number = 0;
var my_data = [{
  url: "/some/url/some_model_name.js?columns%5Bcategory_id%5D=1",
  hash_number_1: 1
}, {
  url: "/some/url/some_model_name.js?",
  hash_number_2: 2
}, {
  url: "/some/url/some_model_name.js?",
  hash_number_3: 3
}, {
  url: "/some/url/some_model_name.js?",
  hash_number_4: 4
}, {
  url: "/some/url/some_model_name.js?",
  hash_number_5: 5
}];

$("#my_value").change(function() {
  var val = parseInt($(this).val());
  var category_number = 0;
  if (val == 1) {
    category_number = 5;
  } else if (val == 2) {
    category_number = 1;
  } else if (val == 3) {
    category_number = 7;
  }

  var url = my_data[0].url;
  url = url.substr(0, url.length - 1) + category_number;
  my_data[0].url = url;

  console.log(my_data);
  console.log(my_data[0]); //first object that has been updated
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input type="text" name="my_value" id="my_value" />

【讨论】:

  • 您好,我已经更新了问题,您可以获取该副本作为来源吗?谢谢
【解决方案3】:

这个怎么样...

function getMyData(category_number) {
  return [{
    url: "/some/url/some_model_name.js?columns%5Bcategory_id%5D=" + category_number, // This variable should change from updateData function
    hash_number_1: 1
  }, {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_2: 2
  }, {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_3: 3
  }, {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_4: 4
  }, {
    url: "/some/url/some_model_name.js?", // Forget about this and it's never going to change. 
    hash_number_5: 5
  }, ];
}

var updateData = function() {
    var my_value = document.getElementById('my_value').value;
    if (my_value == 1) {
      category_number = 5;
    } else if (my_value == 2) {
      category_number = 1;
    } else if (my_value == 3) {
      category_number = 7;
    }
    // This category_number should update the my_data Array Object
    console.log(category_number);

    console.log(getMyData(category_number))
}

【讨论】:

  • 谢谢。函数没有结束?
  • 投反对票的人能说出这种方法有什么问题吗?
  • 抱歉 Aukhan,那不是我。
猜你喜欢
  • 1970-01-01
  • 2019-10-25
  • 1970-01-01
  • 2019-04-29
  • 2023-03-03
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多