js 获取li数据 并拼接成二维数组及后台PHP处理

博客主要讲述两方面内容,一是JS获取li数据并拼接成二维数组,二是PHP使用json_decode()解析JSON.stringify时出现无法解析为NULL的问题,给出的解决办法是在json_decode前使用html_entity_decode。

1.js 获取li数据 并拼接成二维数组

// .ttr 是li的class  获取li的集合 并获取里面两个属性

var arr = new Array();

$('.ttr').each(function(k,v){                

    arr[k] = new Object();

    arr[k]['commodity_id'] = $(this).find("input[name='idtk']").val();

    arr[k]['commodity_qty'] = $(this).find("input[name='commodity_qty']").val();

});

var data=JSON.stringify(arr);

2.PHP如何正确使用 json_decode()解析JSON.stringify

我们会使用 JSON.stringify() 保存某些数据,然后需要在php中读取,但在PHP接到这个参数的数据时,使用json_decode()却无法解析。
所以问题就是,为什么json_decode()解析JSON.stringify为什么为NULL。
解决方法:
当你使用 JSON stringify时,先在json_decode前使用 html_entity_decode。

代码示例:

$tempData = html_entity_decode($tempData);

$cleanData = json_decode($tempData,true);

 

<think>我们正在处理一个二维数组转换为一维数组的问题。在Vue中,我们可以使用多种方法来实现这个转换,例如使用JavaScript的数组方法(如`reduce`、`concat`等)或使用计算属性(computed)来动态转换。 根据引用[4]中提供的代码,我们看到了一个将一维数组转换为树形结构(实际上是一种多维结构)的例子。但是我们现在需要的是将二维数组转换为一维数组,这是一个相反的过程。 二维数组可以看作是一个数组的数组,转换为一维数组就是将每个子数组的元素都提取出来,放入一个新的一维数组中。 在JavaScript中,我们可以使用`Array.prototype.flat()`方法,它可以按照一个可指定的深度递归遍历数组,将所有元素与遍历到的子数组中的元素合为一个新数组返回。例如,对于二维数组,我们可以指定深度为1。 但是,考虑到兼容性(特别是在旧浏览器中可能不支持flat方法),我们也可以使用其他方法,例如使用`reduce`和`concat`。 下面提供几种方法: 方法1:使用flat方法(推荐,但需注意兼容性) ```javascript let newArray = oldArray.flat(1); // 深度1表示二维数组转一维 ``` 方法2:使用reduce和concat ```javascript let newArray = oldArray.reduce((acc, val) => acc.concat(val), []); ``` 方法3:使用concat和apply(在ES6之前常用) ```javascript let newArray = [].concat.apply([], oldArray); ``` 在Vue中,我们通常会在计算属性中执行这种转换,这样当原数组发生变化时,新数组会自动更新。 示例代码(在Vue组件中): ```javascript export default { data() { return { twoDArray: [[1, 2], [3, 4], [5, 6]] }; }, computed: { oneDArray() { // 使用flat方法,如果环境支持 // return this.twoDArray.flat(); // 或者使用reduce return this.twoDArray.reduce((acc, val) => acc.concat(val), []); } } }; ``` 这样,在模板中我们就可以直接使用`oneDArray`这个计算属性了。 如果二维数组中的元素是对象,这些方法同样适用,因为它们是浅拷贝(即新数组中的元素是原数组元素的引用)。 注意:如果原二维数组非常大,使用计算属性可能会引起性能问题,因为每次依赖变化都会重新计算。在这种情况下,可以考虑使用缓存或其他优化手段。 另外,如果需要在Vue模板中直接转换而不使用计算属性,也可以使用方法(methods)中的函数,但不推荐,因为每次渲染都会重新计算。 根据引用[1]、[2]、[3]的内容,它们主要涉及的是将一维数组转换为三维数组或二维对象数组,与当前需求相反,但转换思路有相似之处,都是通过数组操作实现的。 因此,在Vue中将二维数组转换为一维数组,主要就是利用JavaScript的数组扁平化操作,在计算属性中实现以保证响应性。 下面我们生相关问题:</think>### Vue中将二维数组转化为一维数组的方法 在Vue中实现二维数组到一维数组的转换,主要依赖JavaScript的原生数组方法。以下是几种常用方法及示例: #### 方法1:使用 `flat()` 方法(推荐) ```javascript // 计算属性中实现 computed: { flattenedArray() { return this.twoDArray.flat(); } } ``` - **说明**:`flat()` 方法默认展开一层嵌套数组,直接生一维数组 - **优势**:简洁高效,原生API支持 - **注意**:兼容IE需polyfill,或改用方法2 #### 方法2:使用 `reduce()` + `concat()` ```javascript methods: { flattenArray(arr) { return arr.reduce((acc, current) => acc.concat(current), []); } } // 模板中使用: {{ flattenArray(twoDArray) }} ``` #### 方法3:双重循环 ```javascript computed: { flatArray() { const result = []; this.twoDArray.forEach(subArray => { subArray.forEach(item => result.push(item)); }); return result; } } ``` #### 完整Vue组件示例 ```vue <template> <div> <h3>原始二维数组:</h3> <pre>{{ twoDArray }}</pre> <h3>转换后一维数组:</h3> <ul> <li v-for="(item, index) in flattenedArray" :key="index"> {{ item }} </li> </ul> </div> </template> <script> export default { data() { return { twoDArray: [ [1, 2, 3], ['a', 'b', 'c'], [true, false] ] }; }, computed: { flattenedArray() { // 方法1:使用flat() return this.twoDArray.flat(); // 方法2:使用reduce() // return this.twoDArray.reduce((acc, cur) => [...acc, ...cur], []); } } }; </script> ``` #### 关键注意事项: 1. **响应式处理**:使用计算属性(computed)确保原数组变化时自动更新 2. **深度嵌套**:若需处理三维及以上数组,使用 `flat(Infinity)` 3. **对象数组**:上述方法同样适用于对象数组的扁平化 4. **性能优化**:大数据量时推荐 `flat()` 或 `reduce()`,避免双重循环 实际效果: ``` 原始二维数组:[[1,2,3], ['a','b','c'], [true,false]] 转换结果:[1, 2, 3, 'a', 'b', 'c', true, false] ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值