Created
November 8, 2017 13:26
-
-
Save chengjianhua/56b3b7f59118d569ec4c76ea744d1d51 to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/sayonaq
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<!DOCTYPE html> | |
<html> | |
<head> | |
<meta charset="utf-8"> | |
<meta name="viewport" content="width=device-width"> | |
<title>JS Bin</title> | |
</head> | |
<body> | |
<script src="https://cdn.jsdelivr.net/lodash/4/lodash.min.js"></script> | |
<script id="jsbin-javascript"> | |
'use strict'; | |
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | |
var _ref = _; | |
var get = _ref.get; | |
var isArray = _ref.isArray; | |
var flatten = _ref.flatten; | |
var isRealArray = function isRealArray(a) { | |
return isArray(a); | |
}; | |
function getAllArrayPathsOfModel(model, fieldName) { | |
var parts = fieldName.split('[]'); | |
var lastIndex = parts.length - 1; | |
var paths = parts.reduce(function (acc, partPath, partIndex) { | |
// eslint-disable-next-line no-param-reassign | |
acc = acc.map(function (pathWithIndices) { | |
var path = pathWithIndices.path; | |
var indices = pathWithIndices.indices; | |
var newPath = path + partPath; | |
var partData = get(model, newPath); | |
if (isRealArray(partData) && partIndex !== lastIndex) { | |
return partData.map(function (value, index) { | |
return { | |
path: newPath + '[' + index + ']', | |
indices: indices.concat(index) | |
}; | |
}); | |
} | |
return _extends({}, pathWithIndices, { path: newPath }); | |
}); | |
return flatten(acc); | |
}, [{ path: '', indices: [] }]); | |
console.log(paths); | |
return paths; | |
} | |
var model = { | |
datesCreate: [{ | |
date: 123, | |
slotRange: [1, 2, 3, 4] | |
}, { | |
date: 456, | |
slotRange: [1, 2, 3, 4] | |
}] | |
}; | |
var paths1 = getAllArrayPathsOfModel(model, 'datesCreate[].slotRange'); | |
var paths2 = getAllArrayPathsOfModel(model, 'datesCreate[].date'); | |
var paths3 = getAllArrayPathsOfModel(model, 'datesCreate[]'); | |
var paths4 = getAllArrayPathsOfModel(model, 'datesCreate'); | |
</script> | |
<script id="jsbin-source-javascript" type="text/javascript">const { get, isArray, flatten } = _; | |
const isRealArray = a => isArray(a); | |
function getAllArrayPathsOfModel(model, fieldName) { | |
const parts = fieldName.split('[]'); | |
const lastIndex = parts.length - 1; | |
const paths = parts.reduce((acc, partPath, partIndex) => { | |
// eslint-disable-next-line no-param-reassign | |
acc = acc.map((pathWithIndices) => { | |
const { path, indices } = pathWithIndices; | |
const newPath = path + partPath; | |
const partData = get(model, newPath); | |
if (isRealArray(partData) && partIndex !== lastIndex) { | |
return partData.map((value, index) => ({ | |
path: `${newPath}[${index}]`, | |
indices: indices.concat(index), | |
})); | |
} | |
return { ...pathWithIndices, path: newPath }; | |
}); | |
return flatten(acc); | |
}, [{ path: '', indices: [] }]); | |
console.log(paths); | |
return paths; | |
} | |
const model = { | |
datesCreate: [ | |
{ | |
date: 123, | |
slotRange: [ 1, 2, 3, 4 ] | |
}, | |
{ | |
date: 456, | |
slotRange: [ 1, 2, 3, 4 ] | |
} | |
] | |
}; | |
const paths1 = getAllArrayPathsOfModel(model, 'datesCreate[].slotRange'); | |
const paths2 = getAllArrayPathsOfModel(model, 'datesCreate[].date'); | |
const paths3 = getAllArrayPathsOfModel(model, 'datesCreate[]'); | |
const paths4 = getAllArrayPathsOfModel(model, 'datesCreate'); | |
</script></body> | |
</html> |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
'use strict'; | |
var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; | |
var _ref = _; | |
var get = _ref.get; | |
var isArray = _ref.isArray; | |
var flatten = _ref.flatten; | |
var isRealArray = function isRealArray(a) { | |
return isArray(a); | |
}; | |
function getAllArrayPathsOfModel(model, fieldName) { | |
var parts = fieldName.split('[]'); | |
var lastIndex = parts.length - 1; | |
var paths = parts.reduce(function (acc, partPath, partIndex) { | |
// eslint-disable-next-line no-param-reassign | |
acc = acc.map(function (pathWithIndices) { | |
var path = pathWithIndices.path; | |
var indices = pathWithIndices.indices; | |
var newPath = path + partPath; | |
var partData = get(model, newPath); | |
if (isRealArray(partData) && partIndex !== lastIndex) { | |
return partData.map(function (value, index) { | |
return { | |
path: newPath + '[' + index + ']', | |
indices: indices.concat(index) | |
}; | |
}); | |
} | |
return _extends({}, pathWithIndices, { path: newPath }); | |
}); | |
return flatten(acc); | |
}, [{ path: '', indices: [] }]); | |
console.log(paths); | |
return paths; | |
} | |
var model = { | |
datesCreate: [{ | |
date: 123, | |
slotRange: [1, 2, 3, 4] | |
}, { | |
date: 456, | |
slotRange: [1, 2, 3, 4] | |
}] | |
}; | |
var paths1 = getAllArrayPathsOfModel(model, 'datesCreate[].slotRange'); | |
var paths2 = getAllArrayPathsOfModel(model, 'datesCreate[].date'); | |
var paths3 = getAllArrayPathsOfModel(model, 'datesCreate[]'); | |
var paths4 = getAllArrayPathsOfModel(model, 'datesCreate'); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment