咨询:jQuery向数组推入对象元素及特定数组转对象方法
嘿,针对你的两个问题,我来逐一给你解答:
问题1:如何使用jQuery将对象元素推入数组?
首先得明确一点:往数组里添加元素本身是JavaScript的原生能力,jQuery并没有专门搞个函数来替代原生的Array.push()。不过如果你的场景是和jQuery操作DOM、处理元素集合相关的话,我们可以结合着用,给你举两个常见的例子:
要是你只是单纯把JS对象塞进数组,直接用原生
push()就行,完全没必要动用jQuery:let myArray = []; let myObj = { username: "JDoe", email: "jdoe@example.com" }; myArray.push(myObj); // 现在myArray就变成了 [{ username: "JDoe", email: "jdoe@example.com" }]如果你是用jQuery遍历DOM元素,想把每个元素的信息包装成对象再推入数组,那可以这么写:
let productList = []; // 遍历所有class为product的元素 $('.product').each(function() { let productObj = { id: $(this).data('product-id'), name: $(this).find('.product-name').text().trim() }; productList.push(productObj); // 把对象推入数组 });这里核心还是用的原生
push(),jQuery只是帮我们搞定了DOM遍历的活儿~
问题2:如何将指定数组转换为对象?有没有对应的jQuery函数?
先看你给出的数组:
var arr = [{"1":["34"]},{"2":["32","31","30"]},{"3":["29","28","27","26"]}]
要转换成的目标对象是:
{"1":["34"],"2":["32","31","30"],"3":["29","28","27","26"]}
直接说结论:jQuery没有专门做这种数据转换的函数,不过用原生JavaScript就能轻松搞定,而且代码简洁高效,给你两种常用方法:
方法1:用Array.reduce()(推荐,代码简洁)
reduce()可以遍历数组,把每个元素的键值对合并到一个空对象里,非常适合这种场景:
var arr = [{"1":["34"]},{"2":["32","31","30"]},{"3":["29","28","27","26"]}]; var resultObj = arr.reduce(function(acc, currentItem) { // 把当前对象的所有键值对合并到累加对象acc中 return Object.assign(acc, currentItem); }, {}); // 初始值设为空对象{} console.log(resultObj); // 输出就是你要的目标对象
如果你的项目支持ES6箭头函数,还能写得更短:
const resultObj = arr.reduce((acc, curr) => Object.assign(acc, curr), {});
方法2:用普通for循环(兼容老旧浏览器)
要是你需要兼容IE这类不支持ES6的老浏览器,用传统循环也能实现:
var arr = [{"1":["34"]},{"2":["32","31","30"]},{"3":["29","28","27","26"]}]; var resultObj = {}; for (var i = 0; i < arr.length; i++) { var currentItem = arr[i]; // 遍历当前对象的键,把键值对赋值给结果对象 for (var key in currentItem) { if (currentItem.hasOwnProperty(key)) { resultObj[key] = currentItem[key]; } } } console.log(resultObj);
为啥不用jQuery呢?因为这种纯数据结构的转换,原生JS已经足够高效了,jQuery的定位主要是简化DOM操作、事件处理这类前端交互场景,没必要为了这个特意用它~
内容的提问来源于stack exchange,提问作者oussama kamal
相关产品推荐
相关产品推荐

