如何使用 JavaScript 检测数据中的字符串数组和对象数组?
How to detect an array of strings and an array of objects in my data using JavaScript?
我有一个这样的数据对象
{0: "aaaaaaajkhkjhjkhd", customer_name: "SAWTELL NEWS aaaa", bar: Array(2), product totals: "DT 42 - 7 Bulk, 12 Odds, 0 Posters, 572 Supply, 0 Key", summary: {…}
这是一个对象,我想遍历每个项目并检测字符串数组
arrayOfStrings = ['test', 'test]
和一组对象
arrayOfObjects = [{}.{}]
我需要能够检测我的数据是否是一个字符串数组并且是否对其进行了字符串化,如果它是一个对象数组则执行 Y。
基本上我想对 bar: Array(2) 进行字符串化并提取摘要:{...} 或所有对象数组而不是 bar: Array(2)
您可以使用 Array.every
查看每个元素是 object
还是 string
。
let arrStrings = ['a', 'b', []];
let arrObj = [{ a: '1' }, { b: 'test' }, ''];
let isAllStrings = arrStrings.every(i => Object.prototype.toString.call(i) === '[object String]');
let isAllObj = arrObj.every(i => Object.prototype.toString.call(i) === '[object Object]');
编辑:
您可以reduce
将对象的键插入到新对象中。
var data = {
0: "aaaaaaajkhkjhjkhd", customer_name: "SAWTELL NEWS aaaa", bar: ['aaaa', 'bbbb'], totals: "DT 42 - 7 Bulk, 12 Odds, 0 Posters, 572 Supply, 0 Key", summary: { header: "Bulk, Odds, Key", totals: Array(1) }
};
let obj = Object.keys(data).reduce((acc, i) => {
if (isArrayOfType(data[i], 'String'))
return acc[i] = JSON.stringify(data[i]), acc;
if (isArrayOfType(data[i], 'Object') || isOfType(data[i], 'Object'))
return acc[i] = data[i], acc;
return acc;
}, {});
console.log(obj)
function isArrayOfType(arr, type) {
if (!Array.isArray(arr)) return false;
return arr.every(i => isOfType(i, type));
}
function isOfType(i, type) {
return Object.prototype.toString.call(i) === `[object ${type}]`;
}
for (let object of array) {
let type = typeof object;
if (type === 'string') {
doStringLogic;
}
else if (type === 'object') {
doObjectLogic;
}
}
我建议你使用 Object.values,然后用 forEach 循环它,然后用方法检测所需的数组由 JohanP 提供。
JSON.stringify 应该完成字符串数组的工作。
我有一个这样的数据对象
{0: "aaaaaaajkhkjhjkhd", customer_name: "SAWTELL NEWS aaaa", bar: Array(2), product totals: "DT 42 - 7 Bulk, 12 Odds, 0 Posters, 572 Supply, 0 Key", summary: {…}
这是一个对象,我想遍历每个项目并检测字符串数组
arrayOfStrings = ['test', 'test]
和一组对象
arrayOfObjects = [{}.{}]
我需要能够检测我的数据是否是一个字符串数组并且是否对其进行了字符串化,如果它是一个对象数组则执行 Y。
基本上我想对 bar: Array(2) 进行字符串化并提取摘要:{...} 或所有对象数组而不是 bar: Array(2)
您可以使用 Array.every
查看每个元素是 object
还是 string
。
let arrStrings = ['a', 'b', []];
let arrObj = [{ a: '1' }, { b: 'test' }, ''];
let isAllStrings = arrStrings.every(i => Object.prototype.toString.call(i) === '[object String]');
let isAllObj = arrObj.every(i => Object.prototype.toString.call(i) === '[object Object]');
编辑:
您可以reduce
将对象的键插入到新对象中。
var data = {
0: "aaaaaaajkhkjhjkhd", customer_name: "SAWTELL NEWS aaaa", bar: ['aaaa', 'bbbb'], totals: "DT 42 - 7 Bulk, 12 Odds, 0 Posters, 572 Supply, 0 Key", summary: { header: "Bulk, Odds, Key", totals: Array(1) }
};
let obj = Object.keys(data).reduce((acc, i) => {
if (isArrayOfType(data[i], 'String'))
return acc[i] = JSON.stringify(data[i]), acc;
if (isArrayOfType(data[i], 'Object') || isOfType(data[i], 'Object'))
return acc[i] = data[i], acc;
return acc;
}, {});
console.log(obj)
function isArrayOfType(arr, type) {
if (!Array.isArray(arr)) return false;
return arr.every(i => isOfType(i, type));
}
function isOfType(i, type) {
return Object.prototype.toString.call(i) === `[object ${type}]`;
}
for (let object of array) {
let type = typeof object;
if (type === 'string') {
doStringLogic;
}
else if (type === 'object') {
doObjectLogic;
}
}
我建议你使用 Object.values,然后用 forEach 循环它,然后用方法检测所需的数组由 JohanP 提供。 JSON.stringify 应该完成字符串数组的工作。