Skip to content

Instantly share code, notes, and snippets.

@chengjianhua
Created November 8, 2017 13:26
Show Gist options
  • Save chengjianhua/56b3b7f59118d569ec4c76ea744d1d51 to your computer and use it in GitHub Desktop.
Save chengjianhua/56b3b7f59118d569ec4c76ea744d1d51 to your computer and use it in GitHub Desktop.
JS Bin // source https://jsbin.com/sayonaq
<!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>
'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