这是我的原始数据/参数:
const reference = ["gYDJWsfSHFBzoGjya", "hp9v53uQqQPRXSYAi"] // expected new reference value
const elementID = "XyLChbksZjenyEHqL" // ID of the array object which should be updated
const data = {
getContent: {
content: [
{ _id: "XyLChbksZjenyEHqL", reference: ['hp9v53uQqQPRXSYAi'] },
// some more objects here
]
}
}
现在我需要设置具有特定id的数组对象的引用值。
const result = {
getContent: {
content: [
{ _id: "XyLChbksZjenyEHqL", reference: ["gYDJWsfSHFBzoGjya", "hp9v53uQqQPRXSYAi"] },
// some more objects here
]
}
}
我是这样做的:
data.getContent.content
.find(({ _id }) => _id === elementID).reference = reference
但由于IE11不支持find(),我问是否有另一种方法可以完成这项工作。 我不想在这个简单的事情上使用polyfill。
答案 0 :(得分:1)
您可以使用forEach
:
data.getContent.content.forEach((element)=>{
if (element.id === elementID){
element.reference = reference;
}
});
它以类似的方式工作。您将callback
传递给forEach
函数,并在数组的每个元素上执行该回调。
然后,检查当前正在处理的元素是否与id
给出的elementID
相同。
如果是,则将该特定元素的reference
设置为您想要的任何内容。
答案 1 :(得分:0)
尝试以下方法:
您可以使用forEach循环,并将所有对象ID与元素id匹配,并更新元素id与对象id匹配的对象的引用。
请注意 - IE9或更高版本支持forEach,如果您使用以前的版本,请使用简单的for循环。 Reference
const reference = ["gYDJWsfSHFBzoGjya", "hp9v53uQqQPRXSYAi"] ;
const elementID = "XyLChbksZjenyEHqL" ;
const data = {
getContent: {
content: [
{ _id: "XyLChbksZjenyEHqL", reference: ['hp9v53uQqQPRXSYAi'] },
// some more objects here
]
}
};
data.getContent.content.forEach(function(o){
if(o._id === elementID){
o.reference = reference;
}
});
console.log(data);
答案 2 :(得分:0)
您可以使用简单的for loop
const reference = ["gYDJWsfSHFBzoGjya", "hp9v53uQqQPRXSYAi"];
let elementID = "XyLChbksZjenyEHqL";
const result = {
getContent: {
content: [
{ _id: "XyLChbksZjenyEHqL", reference: ["gYDJWsfSHFBzoGjya", "hp9v53uQqQPRXSYAi"] },
// some more objects here
]
}
}
let obj;
for (let i = 0; i < result.getContent.content.length; i++) {
if(result.getContent.content[i]._id === elementID) {
obj = result.getContent.content[i];
break;
}
}
if(obj) obj.reference= reference;
console.log(result)
您还可以在循环中更新对象
const reference = ["gYDJWsfSHFBzoGjya", "hp9v53uQqQPRXSYAi"];
let elementID = "XyLChbksZjenyEHqL";
const result = {
getContent: {
content: [
{ _id: "XyLChbksZjenyEHqL", reference: ["gYDJWsfSHFBzoGjya", "hp9v53uQqQPRXSYAi"] },
]
}
};
for (let i = 0; i < result.getContent.content.length; i++) {
if(result.getContent.content[i]._id === elementID) {
result.getContent.content[i].reference = reference;
break;
}
}
console.log(result)
或者您可以为MDN
上的Array.find
创建一个Polyfill
答案 3 :(得分:0)
以下find()
function
returns
来自array
的给定predicate
的第一场比赛。
JS transpiler
等// Input.
const input = [{id:1}, {id:2}, {id:3}, {id:4}, {id:5, y:'five'}]
// Find.
function find(array, predicate) {
for (var i = 0; i < array.length; i ++) {
var x = array[i];
if (predicate(x)) {
return x;
}
}
return false;
}
// Proof.
console.log(find(input, x => x.id === 5)) // {id: 5, y: 'five'}
console.log(find(input, x => x.id === 10)) // false
也可能值得调查。
var noLeadingSpace = /^\w.*$/;
$("input")
.data("oldValue", "")
.bind("input propertychange", function() {
var $this = $(this);
var newValue = $this.val();
if (!noLeadingSpace.test(newValue))
return $this.val($this.data("oldValue"));
return $this.data("oldValue", newValue);
});